【问题标题】:Order By Clause Not working with GROUP BYOrder By Clause 不适用于 GROUP BY
【发布时间】:2013-01-17 17:34:42
【问题描述】:

我正在尝试使用以下按小时计算订单数量的函数:

SELECT
    COUNT(id) total,
    DATENAME(HOUR, purchased_on) label,
    site
FROM dhs.dbo.orders
WHERE purchased_on >= '01/16/2013'
GROUP BY DATENAME(HOUR, purchased_on), site
ORDER BY label DESC

即使我正在使用 ORDER BY 子句,我得到以下结果,该子句应该将它们按从最高标签到最低标签的顺序排列:

total   label   site
2         9     AMAZON
1         9     DHS
2         8     AMAZON
1         7     AMAZON
1         6     AMAZON
1         4     AMAZON
1         12    AMAZON
3         11    AMAZON
1         10    AMAZON
1         10    DHS  

为什么order by 不起作用?

【问题讨论】:

    标签: sql sql-server-2008 group-by


    【解决方案1】:

    DATENAME 返回一个VARCHAR

    将其替换为DATEPART:

    SELECT  COUNT(id) total,
            DATEPART(HOUR, purchased_on) label,
            site
    FROM    dhs.dbo.orders
    WHERE   purchased_on >= '01/16/2013'
    GROUP BY
            DATEPART(HOUR, purchased_on), site
    ORDER BY
            label DESC
    

    【讨论】:

    • 你是对的,刚刚检查了 DATENAME 的返回值及其一个 varchar。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 2020-06-30
    • 2019-01-27
    相关资源
    最近更新 更多