gpt4 book ai didi

SQL 障碍 - SQL Server 2008

转载 作者:行者123 更新时间:2023-12-02 07:54:59 28 4
gpt4 key购买 nike

以下查询返回过去 12 个月(针对特定客户)每周的订单总量:

SELECT DATEPART(year, orderDate) AS [year],
DATEPART(month, orderDate) AS [month],
DATEPART(wk, orderDate) AS [week],
COUNT(1) AS orderCount
FROM dbo.Orders (NOLOCK)
WHERE customerNumber = @custnum
AND orderDate >= DATEADD(month, -12, GETDATE())
GROUP BY DATEPART(year, orderDate),
DATEPART(wk, orderDate),
DATEPART(month, orderDate)
ORDER BY DATEPART(year, orderDate),
DATEPART(wk, orderDate)

返回的结果如下:

year    month    week    orderCount
2008 1 1 23
2008 3 12 5

...

如您所见,结果集中只会返回有该客户订单的周数。我需要它返回过去 12 个月中每周的一行...如果该周不存在订单,那么为 orderCount 返回 0 就可以了,但我仍然需要年、周和月。我可能可以通过创建一个单独的表来存储一年中的几周来做到这一点,然后对它进行外部连接,但我不想这样做。也许 SQL 中有什么东西可以完成这个?我可以使用内置函数创建查询以使用内置 SQL 函数返回过去 12 个月中的所有周吗?我在 SQL Server 2008 上。

编辑:根据 Scott 的建议,我在下面发布了解决此问题的查询。

最佳答案

您可以加入递归 CTE - 像下面这样的东西应该可以让您开始......

WITH MyCte AS    
(SELECT MyWeek = 1
UNION ALL
SELECT MyWeek + 1
FROM MyCte
WHERE MyWeek < 53)
SELECT MyWeek,
DATEPART(year, DATEADD(wk, -MyWeek, GETDATE())),
DATEPART(month, DATEADD(wk, -MyWeek, GETDATE())),
DATEPART(wk, DATEADD(wk, -MyWeek, GETDATE()))
FROM MyCte

关于SQL 障碍 - SQL Server 2008,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1406351/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com