【问题标题】:How to get the right order?如何获得正确的订单?
【发布时间】:2017-05-18 21:39:16
【问题描述】:

我编写了查询来获取 2016 年每个月的总数量。然后我添加了另一行名为 Total 来总结 2016 年的总数量。但是 ordermonth 结果结果一团糟。

那么,问题是有没有办法把 ordermonth 放在正确的顺序? ASCDESC 都可以。提前致谢。

我写的查询:

WITH CTE AS(
        SELECT CONVERT(CHAR(10), MONTH(orderdate)) AS ordermonth, SUM(qty) AS qty
        FROM dbo.orders
        WHERE YEAR(orderdate) = 2016
        GROUP BY MONTH(orderdate)
    )
SELECT * FROM CTE 

UNION

SELECT 'Total', SUM(qty)
FROM dbo.orders
WHERE YEAR(orderdate) = 2016;

当前结果:

ordermonth  qty
1           4134
10          6454
11          9780
12          4000
2           5548
3           6970
4           3543
5           3309
6           4251
7           4997
8           6134
9           6926
Total      66046

【问题讨论】:

  • 这里的大多数人想要格式化的文本,而不是图像(或链接)。
  • @jarlh对此感到抱歉。由于我是 SO 新手,因此我无权直接展示图片。感谢您的理解。
  • 带格式的文本更好!

标签: sql sql-server sql-order-by


【解决方案1】:

首先,您可以在没有UNION 的情况下为所欲为。像这样的:

select coalesce(cast(month(orderdate) as varchar(255)), 'Total') as mon . . .
from . . .
group by grouping sets (month(orderdate), ())
order by month(orderdate)

没有 CTE,这是整个查询。

【讨论】:

    【解决方案2】:

    您可以放入子查询并尝试如下:

    select * from (
     --your query including cte and union 
      ) a
      order by case when a.[Month] = 'Total' then 9999 else convert(int,a.[Month]) end
    

    【讨论】:

      【解决方案3】:

      您可以按 yyyymm 排序,即使您有一年以上的时间,这也是最好的方式,即

      order by orderyear * 100 + ordermonth
      

      或者您可以添加“0”以获得正确的顺序,如下所示:

      order by right('0' + cast(ordermonth as varchar(2)), 2)
      

      【讨论】:

        【解决方案4】:

        我找到了一个简单的方法来解决这个问题,即用 UNION ALL 替换 UNION。

        WITH CTE AS(
                SELECT CONVERT(CHAR(10), MONTH(orderdate)) AS ordermonth, SUM(qty) AS qty
                FROM dbo.orders
                WHERE YEAR(orderdate) = 2016
                GROUP BY MONTH(orderdate)
            )
        SELECT * FROM CTE 
        
        UNION ALL
        
        SELECT 'Total', SUM(qty)
        FROM dbo.orders
        WHERE YEAR(orderdate) = 2016;
        

        【讨论】:

          猜你喜欢
          • 2020-11-17
          • 1970-01-01
          • 1970-01-01
          • 2021-12-25
          • 2014-03-05
          • 1970-01-01
          • 2012-11-08
          • 2021-05-23
          相关资源
          最近更新 更多