【发布时间】:2018-09-24 14:42:21
【问题描述】:
我已经浏览了很多示例,并加入了其中的几个,以便得出以下陈述;
DECLARE @StartDate SMALLDATETIME, @EndDate SMALLDATETIME;
SELECT @StartDate = '20170930', @EndDate = '20180930';
;WITH d(d) AS
(
SELECT DATEADD(MONTH, n, DATEADD(MONTH, DATEDIFF(MONTH, 0, @StartDate), 0))
FROM ( SELECT TOP (DATEDIFF(MONTH, @StartDate, @EndDate) + 1)
n = ROW_NUMBER() OVER (ORDER BY [object_id]) - 1
FROM sys.all_objects ORDER BY [object_id] ) AS n
)
SELECT
[Period] = CONVERT(VARCHAR(4), YEAR(d.d)) + '-' + CONVERT(VARCHAR(2), MONTH(d.d)),
QtyTotal = ISNULL(SUM(o.QEXIT),0)
FROM d LEFT OUTER JOIN VE_STOCKTRANS AS o
ON o.TRANSDATE >= d.d
AND o.TRANSDATE < DATEADD(MONTH, 1, d.d)
WHERE STOCKID = 6000 AND TRANSTYPE = 3553
GROUP BY d.d
ORDER BY d.d;
我需要获取某件商品在过去一年的总销售量。如果该商品在该特定月份没有任何销售额,则该月份旁边应显示 0。除非提供了 WHERE 子句,否则上述查询会执行所需的操作。一旦我添加 WHERE 子句来获取特定产品的数据,没有销售的月份就会消失。
如果有经验的 SQL 开发人员能告诉我正确的方向,我将不胜感激。
谢谢
【问题讨论】:
标签: sql sql-server tsql common-table-expression