sql - 如何在 SQL PIVOT 中 ORDER BY

标签 sql sql-server tsql pivot

我目前使用 PIVOT 进行此查询,生成如下表:

  USER  |  DEC  |  NOV  |  OCT
---------------------------------
  bob   |   3   |   5   |   2
  jon   |   7   |   0   |   1 
  tim   |   4   |   2   |   6

我想做的,但看起来像是一个延伸,就是按DEC值降序ORDER BY结果。

这是查询:

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会出错,因此可以指定列吗?

最佳答案

试试这个:

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

关于sql - 如何在 SQL PIVOT 中 ORDER BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13755017/

相关文章:

sql-server - 如何确定解决此错误:.NET Framework执行由于内存不足而被升级策略中止了?

sql-server - 保留 UnionAggregate 中的起点

c# - 在 sqldatasource 中读取 sql 模式

MySQL 用联合选择层次结构

sql - 当您希望 NULL = NULL 为真时,在 SQL 中该怎么做?

sql-server - 在 SSMS 中按架构对表进行分组

mysql - 如何使一条记录的值成为mysql上字段的标题?

sql - 重写 WHERE NOT IN 子句的最佳方法?

mysql - 使用连接优化 SQL 选择查询

sql-server - 使用 sp_addlinkedserver 添加服务器