我有一个返回数据,数量和小时的查询。它是全年所有销售额的总和。我试图实现像谷歌忙碌的时间。我挣扎的是订购时间。我不想要0-24,我想要的是06-05。所以开始时间早上6点就说,结束时间早上5点。做了像Select Sum(Qty), Datepart(hh, saletime)
这样的事情。然后按销售分组。
按销售时间订购,并获得0,1,2,3,4等小时数,但我要花6小时或其他明确的开始时间开始。
有人帮忙吗?
答案 0 :(得分:2)
您可以通过执行CASE
语句来声明自己的排序顺序,该语句会在6之前的任何内容中添加24小时。
在这里,我将它作为一个列包含在内,以便您可以看到它实际上在做什么:
SELECT
Sum(Qty) as [Sum],
Datepart(hour, saletime) AS [Hour],
CASE
WHEN Datepart(hour, saletime) >= 6 THEN Datepart(hour, saletime)
ELSE Datepart(hour, saletime) + 24
END AS [SortOrder]
FROM
MyTable
ORDER BY
SortOrder
<强>输出:强>
Sum Hour SortOrder
2 6 6
3 7 7
17 8 8
-- -- -- Skipping rows for brevity
18 3 27
13 4 28
2 5 29
但如果您不希望将SortOrder
作为列,只需将其移至ORDER BY
:
SELECT
Sum(Qty) as [Sum],
Datepart(hour, saletime) AS [Hour]
FROM
MyTable
ORDER BY
CASE
WHEN Datepart(hour, saletime) >= 6 THEN Datepart(hour, saletime)
ELSE Datepart(hour, saletime) + 24
END
编辑:对问题本身进行Aaron Bertrand's评论,我已将查询更新为使用hour
而不是hh
。他提供的资源可以是seen here。
答案 1 :(得分:0)
您可以使用modula公式进行排序:
select sum(qty), datepart(hour, saletime)
from sales
group by datepart(hour, saletime)
order by (datepart(hour, saletime) + 19) % 24