我目前有使用PIVOT生成如下表的查询:
USER | DEC | NOV | OCT --------------------------------- bob | 3 | 5 | 2 jon | 7 | 0 | 1 tim | 4 | 2 | 6
我想做的是,但看起来像是拉伸ORDER BY,结果是DEC值递减。
ORDER BY
DEC
这是查询:
with Mth (st, nd) as ( select DATEADD (M, datediff (m, 0,'2012-09-01'), 0), DATEADD (M, DATEDIFF (m, 0, '2012-09-01') + 1, 0) union all select DATEADD (m, 1, st), DATEADD (m, 1, nd) from Mth where nd <= DATEADD (m, datediff (m, 0, getdate()), 0) ) select * from ( select MONTH(Mth.st) Month, U.USER, COUNT(S.QRY_ID) Searches FROM Mth LEFT JOIN SEARCHES S on Mth.st <= S.CREATED and Mth.nd > S.CREATED LEFT JOIN MEMBERS U on U.AID = S.AID GROUP BY YEAR(Mth.st), MONTH(Mth.st), U.HOLDER_LOGIN ) src pivot ( sum(searches) for month in ([12],[11],[10]) ) piv
这样做piv ORDER BY piv.Searches会产生错误,因此可以指定列吗?
piv ORDER BY piv.Searches
试试这个:
with Mth (st, nd) as ( select DATEADD (M, datediff (m, 0,'2012-09-01'), 0), DATEADD (M, DATEDIFF (m, 0, '2012-09-01') + 1, 0) union all select DATEADD (m, 1, st), DATEADD (m, 1, nd) from Mth where nd <= DATEADD (m, datediff (m, 0, getdate()), 0) ), Pivoted AS ( select * from ( select MONTH(Mth.st) Month, U.USER, COUNT(S.QRY_ID) Searches FROM Mth LEFT JOIN SEARCHES S on Mth.st <= S.CREATED and Mth.nd > S.CREATED LEFT JOIN MEMBERS U on U.AID = S.AID GROUP BY YEAR(Mth.st), MONTH(Mth.st), U.HOLDER_LOGIN ) src pivot ( sum(searches) for month in ([12],[11],[10]) ) piv ) SELECT * FROM Pivoted ORDER BY Dec