当前位置: 首页 > 面试题库 >

如何在SQL PIVOT中订购

云文栋
2023-03-14
问题内容

我目前有使用PIVOT生成如下表的查询:

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

我想做的是,但看起来像是拉伸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会产生错误,因此可以指定列吗?


问题答案:

试试这个:

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


 类似资料:
  • 在REST控制器中,我需要调用REST以获取一个值,用作第二次REST调用的URI变量。 问题是在WebFlux REST中不可能调用mono/flux上的块。 代码抛出 Java . lang . illegalstateexception block()/block first()/block last()正在阻塞,这在线程反应器中是不支持的-http 我试图改变 . build(result

  • 问题内容: 我想知道Java在添加项目时如何在(或)中对项目进行排序。密钥是按哈希码,内存引用还是分配优先级排序的? 这是因为我注意到中的相同对并不总是以相同的顺序排列 问题答案: 无序的 您不能也不应承担任何其他责任。 此类无法保证地图的顺序。特别是,它不能保证顺序会随着时间的推移保持恒定。 使用插入顺序。 此实现的不同之处在于,它维护一个遍历其所有条目的双向链接列表。此链表定义了迭代顺序,通常

  • mysql会员订阅数据表的设计应该如何设计?产品有订阅商品和非订阅的,每次都只能购买一个。 订阅有1个月 3个月的 每次到期自动扣费。如果在一个月类购买了几个订阅商品 则扣费按照最新的一个 然后延长到期时间。其实是不是每次订阅都不需要生成新订单的 翻阅了其他资料都找不到很好的设计

  • 问题内容: 我需要在 grails Web应用程序中为文章实现一个修订系统。在搜索grails论坛,stackoverflow,grails插件和谷歌搜索互联网之后,我最终得到3个选择: 选项1- 使用 grails Envers插件 (请参阅http://code.google.com/p/grails-envers- plugin/ )。有人成功使用过吗?或者使用不带插件的Envers(请参阅

  • 问题内容: 我想让我的PHP应用程序标有它使用的修订号,但是我不想使用CruiseControl或更新文件并每次都上传它。我该怎么办? 问题答案: SVN关键字不是一个好的解决方案。正如其他人指出的那样,在文件中添加$ Revision $仅会影响 特定文件 ,该 文件 可能不会长时间更改。 记住在每次提交之前“编辑”文件(通过添加或删除空白行)是没有意义的。您也可以手动输入修订。 做到这一点的一

  • 在这篇文章之后,我正在使用带有RxJava/RxKotlin Flowable的Room。我让它运行,但在带有3个片段的ViewPager中使用它存在问题。 我将向您介绍我的代码: 我有一个带有选项卡布局和三个片段(A、B和收藏夹)的视图分页器。前两个片段包含可以添加到收藏夹的数据列表。 在最喜欢的片段中,我使用Flowable来监听A和B所做的更改并相应地更新列表。但是,当一个项目在A和B中成为