您能否按照以下要求帮助我生成结果?
我已经生成了一个结果集但是在我的数据中几个月没有数据因此,因此,记录集中没有显示月份,但我希望显示没有数据的所有月份。
请参阅附图,我也附上了结果脚本,可以轻松搞定。
{{3}}
Create Table #TempTbl(
[Year] int,
[Month] int,
LostQty int,
WonQty int,
LostValue int,
WonValue int,
)
GO
INSERT INTO #TempTbl VALUES (2015, 3, 13, 6, 3000,4500),
(2015, 4, 1, 1, 4000, 200),
(2015, 5, 0, 1, 0, 200),
(2015, 6, 4, 6, 5000, 3000),
(2015, 7, 1, 2, 3500, 1100),
(2015, 8, 1, 1, 2000, 900),
(2015, 9, 5, 0, 2500, 0),
(2015, 10, 6, 3, 4500, 800),
(2015, 11, 0, 1, 0, 7400),
(2015, 12, 1, 0, 2200, 0),
(2016, 1, 3, 5, 2200, 200),
(2016, 2, 0, 1, 0, 1500),
(2016, 3, 1, 0, 2300, 0),
(2016, 4, 1, 0, 3500, 0),
(2016, 9, 4, 1, 1500, 1400),
(2016, 10, 16, 4, 1700, 3000),
(2016, 11, 5, 5, 500, 400),
(2016, 12, 6, 0, 600, 0)
答案 0 :(得分:0)
正如评论中所提到的,永久日历表对于许多不同的任务非常有用,但有时添加新对象根本不可行。在那种情况下,动态构建一个很容易。
注意......在这个解决方案中,我使用基表来查询年份,但这样做是不必要的(甚至是不可取的)......只需记住一些事情...... < / p>
WITH
cte_Calendar AS (
SELECT DISTINCT
tt.[year],
m.[Month]
FROM
#TempTbl tt
CROSS APPLY ( VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12) ) m ([Month])
)
SELECT
c.[Year], c.[Month], tt.LostQty, tt.WonQty, tt.LostValue, tt.WonValue
FROM
#TempTbl tt
FULL JOIN cte_Calendar c
ON tt.[Year] = c.[Year]
AND tt.[Month] = c.[Month]
ORDER BY
c.[Year],
c.[Month];
结果......
Year Month LostQty WonQty LostValue WonValue
----------- ----------- ----------- ----------- ----------- -----------
2015 1 NULL NULL NULL NULL
2015 2 NULL NULL NULL NULL
2015 3 13 6 3000 4500
2015 3 13 6 3000 4500
2015 4 1 1 4000 200
2015 4 1 1 4000 200
2015 5 0 1 0 200
2015 5 0 1 0 200
2015 6 4 6 5000 3000
2015 6 4 6 5000 3000
2015 7 1 2 3500 1100
2015 7 1 2 3500 1100
2015 8 1 1 2000 900
2015 8 1 1 2000 900
2015 9 5 0 2500 0
2015 9 5 0 2500 0
2015 10 6 3 4500 800
2015 10 6 3 4500 800
2015 11 0 1 0 7400
2015 11 0 1 0 7400
2015 12 1 0 2200 0
2015 12 1 0 2200 0
2016 1 3 5 2200 200
2016 1 3 5 2200 200
2016 2 0 1 0 1500
2016 2 0 1 0 1500
2016 3 1 0 2300 0
2016 3 1 0 2300 0
2016 4 1 0 3500 0
2016 4 1 0 3500 0
2016 5 NULL NULL NULL NULL
2016 6 NULL NULL NULL NULL
2016 7 NULL NULL NULL NULL
2016 8 NULL NULL NULL NULL
2016 9 4 1 1500 1400
2016 9 4 1 1500 1400
2016 10 16 4 1700 3000
2016 10 16 4 1700 3000
2016 11 5 5 500 400
2016 11 5 5 500 400
2016 12 6 0 600 0
2016 12 6 0 600 0