2017-03-06 96 views
0

我是新手,想创建一个SQL查询来查找每个剧院在过去一年中每月售出门票数量(即所有12个月) 。如果收集量为空或空白,那么我需要在该年的任何一个月中产生一个输出为零。如何在sql server中连续提取月份数据(即使存在空值)

我有两个表如下所述:

表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或空值。我无法用ze生成这些缺失的月份ro值。我尝试用简单的左外连接但数据输出行仍然不显示月/年和值。

我需要产生输出如下:

输出

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脚本,以产生输出,如上图所示。提前谢谢你。

+0

只需使用一个',左JOIN'代替'INNER JOIN' –

+0

显示你有什么迄今为止尝试过。发布您的查询。 –

回答

2

您可以使用每个战区和月 - 年之间的CROSS JOIN,然后执行LEFT JOINTable2

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]; 
+0

您的回答非常好,准确。非常感谢您的快速帮助。我最好选择你的答案。 – desi