【问题标题】:OVER clause. How to order by multiple columns within a CASE clause?OVER 子句。如何在 CASE 子句中按多列排序?
【发布时间】:2014-03-04 18:21:57
【问题描述】:

以下 SQL 代码是较大 SQL 语句的示例。我的问题是如何在SELECT ROW_NUMBER() 中执行CASE 多列ORDER BY,类似于下面的注释行。提供的代码有效,但我需要按两列排序。

我正在使用 MSSQL 2008

SELECT TOP(50)
    ROW_NUMBER() OVER(ORDER BY CASE WHEN @OrderBy = 'Total' THEN SUM(TotalViews) ELSE SUM(LastMonthViews) END DESC) AS Position
    ,SUM(Albums.TotalViews) AS TotalViews
    ,SUM(Albums.LastMonthViews) AS LastMonthViews
FROM Albums

--The code to be implemented in the SELECT ROW_NUMBER()
ORDER BY SUM(LastMonthViews) DESC, SUM(TotalViews) DESC

【问题讨论】:

  • 你有想要的结果的例子吗?
  • 我会尝试提出并更新问题。
  • 查询中有GROUP BY吗?
  • @ypercube 是的,我有,这段代码是大查询的摘录。
  • 你不能ORDER BY LastMonthViews, TotalViews吗?这些是您为这些聚合创建的别名;它们应该在 ORDER BY 子句的范围内。

标签: sql tsql


【解决方案1】:

您可以在row_number() 分区子句中重复case 语句:

SELECT TOP(50)
        ROW_NUMBER() OVER (ORDER BY (CASE WHEN @OrderBy = 'Total' THEN SUM(LastMonthViews) ELSE SUM(LastMonthViews) END) DESC,
                                    (CASE WHEN @OrderBy = 'Total' THEN SUM(TotalViews) ELSE SUM(LastMonthViews) END) DESC
                          ) AS Position
    ,SUM(Albums.TotalViews) AS TotalViews
    ,SUM(Albums.LastMonthViews) AS LastMonthViews
FROM Albums;

【讨论】:

    猜你喜欢
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    相关资源
    最近更新 更多