我必须按月累计和数量,但在某些月份没有数量,SQL不显示这些行。
我已经尝试了很多其他的解决方案,但是没有一个能成功,或者至少我不能让它们成功。目前,我的代码如下:
SELECT DISTINCT
A.FromDate
,A.ToDate
,A.OperationType
,A.[ItemCode]
,SUM(A.[Quantity]) OVER (PARTITION BY [ItemCode],OperationType,YEAR ORDER BY MONTH) [Quantity]
FROM (
SELECT
CONVERT(DATE,DATEADD(yy, DATEDIFF(yy, 0, T.OrderDate), 0)) AS FromDate
,EOMONTH(T.OrderDate) ToDate
,DATEPART(MONTH, t.OrderDate) AS [Month]
,DATEPART(YEAR, t.OrderDate) AS [Year]
,SUM(T.[Quantity]) [Quantity]
,OperationType
,[ItemCode]
FROM TEST T
WHERE [ItemCode] != ''
GROUP BY T.OrderDate,[ItemCode],OperationType
) A
结果如下:
| 起始日期|截止日期|O类型|项目代码|数量|
| - -|- -|- -|- -|- -|
| 2021年1月1日|2021年1月31日|类型1|一个|十九个|
| 2021年1月1日|2021年2月28日|类型1|一个|九十六个|
| 2021年1月1日|2021年3月31日|类型1|一个|一百一十六个|
| 2021年1月1日|2021年4月30日|类型1|一个|一百三十八|
| 2021年1月1日|2021年6月30日|类型1|一个|一百七十八|
| 2021年1月1日|2021年7月31日|类型1|一个|二百零三人|
| 2021年1月1日|2021年8月31日|类型1|一个|二百二十八人|
| 2021年1月1日|2021年9月30日|类型1|一个|二百五十三|
| 2021年1月1日|2021年11月30日|类型1|一个|三百三十人|
| 2021年1月1日|2021年12月31日|类型1|一个|三百六十四|
| 2022年1月1日|2022年2月28日|类型1|一个|十八岁|
| 2022年1月1日|2022年3月31日|类型1|一个|四十二|
| 2022年1月1日|2022年4月30日|类型1|一个|五十三个|
我期待着这样的结果:
| 起始日期|截止日期|O类型|项目代码|数量|
| - -|- -|- -|- -|- -|
| 2021年1月1日|2021年1月31日|类型1|一个|十九个|
| 2021年1月1日|2021年2月28日|类型1|一个|九十六个|
| 2021年1月1日|2021年3月31日|类型1|一个|一百一十六个|
| 2021年1月1日|2021年4月30日|类型1|一个|一百三十八|
| 2021年1月1日|2021年5月31日|类型1|一个|一百三十八|
| 2021年1月1日|2021年6月30日|类型1|一个|一百七十八|
| 2021年1月1日|2021年7月31日|类型1|一个|二百零三人|
| 2021年1月1日|2021年8月31日|类型1|一个|二百二十八人|
| 2021年1月1日|2021年9月30日|类型1|一个|二百五十三|
| 2021年1月1日|2021年10月31日|类型1|一个|二百五十三|
| 2021年1月1日|2021年11月30日|类型1|一个|三百三十人|
| 2021年1月1日|2021年12月31日|类型1|一个|三百六十四|
| 2022年1月1日|2022年2月28日|类型1|一个|十八岁|
| 2022年1月1日|2022年3月31日|类型1|一个|四十二|
| 2022年1月1日|2022年4月30日|类型1|一个|五十三个|
SQL Fiddle链接:http://www.sqlfiddle.com/#!18/04a997/1
我真的很感激你的帮助谢谢
1条答案
按热度按时间c6ubokkw1#
这里有一种方法:
这把小提琴的工作示例。