即使存在空值,如何在sql server中拉出连续的月份数据

时间:2017-03-06 20:51:28

标签: sql-server sql-server-2008 tsql

我是新手试图创建一个SQL查询,以查找每个剧院在前一年(即所有12个月)每月售出的票数。如果收集金额为空或空白,我需要在该年度中将任何此类给定月份的输出生成为零。

我有两张表如下:

表1:

Month_Number    Year
1                  2016
2                  2016
3                  2016
4                  2016
5                  2016
6                  2016
7                  2016
8                  2016
9                  2016
10                 2016
11                 2016
12                 2016

表2:

Theater    month    Amount_In_Thousands
ABC          1       165
ABC          3       70
ABC          4       102
GHI          1       45
GHI          2       70
GHI          3       42
GHI          4       57
ABC          6       122
ABC          7       67
ABC          8       22
ABC          9       80
ABC          11      46
ABC          12      38

您可能已经注意到'ABC'影院的第2个月,第5个月和第10个月有0或null值。我无法生成零值的缺失月份。我尝试使用简单的左外连接,但数据输出行仍未显示月/年和值。

我需要按如下方式生成输出:

输出

Movie_Theators  Month   Amount_In_Thounds   
ABC                1    165 
ABC                2    0    *  
ABC                3    70  
ABC                4    102 
ABC                5    0    *  
ABC                6    122 
ABC                7    67  
ABC                8    22  
ABC                9    80  
ABC                10   0    *  
ABC                11   46  
ABC                12   38  
GHI                1    45  
GHI                2    70  
GHI                3    42  
GHI                4    57  

任何人都可以帮我如何编写sql脚本以产生如上所示的输出。非常感谢你。

1 个答案:

答案 0 :(得分:2)

您可以在每个影院和月份之间使用CROSS JOIN,然后使用LEFT JOIN执行Table2

SELECT  A.Theater,
        B.Month_Number,
        B.[Year],
        ISNULL(C.Amount_In_Thousands,0) Amount_In_Thousands
FROM (  SELECT DISTINCT Theater
        FROM dbo.Table2) A -- or use a dbo.Theater table if you have one
CROSS JOIN dbo.Table1 B
LEFT JOIN dbo.Table2 C
    ON A.Theater = C.Theater
    AND B.Month_Number = C.[month]
    AND B.[Year] = C.[Year];