2017-09-22 38 views
1

我的表返回結果如下(跳過行如果HOUROFDAY不具有特定ID數據)SQL如何在沒有可用數據的情況下強制顯示0行?

ID  HourOfDay Counts 
-------------------------- 
1   5   5 
1   13   10 
1   23   3 
..........................HourOfDay up till 23 
2   9   1 

等。

我想實現是強制顯示行的HoursOfDay顯示0,沒有數據,如下列:

ID  HourOfDay Counts 
-------------------------- 
1   0   0 
1   1   0 
1   2   0 
1...................... 
1   5   5 
1   6   0 
1...................... 
1   23   3 
2   0   0 
2   1   0 
etc. 

我身邊有研究一下吧。它看起來像我可以實現這個結果,如果我創建一個額外的表和外部連接它。在SP所以我創建表變量(如一個臨時的解決方法)

DECLARE @Hours TABLE 
(
    [Hour]      INT     NULL 
); 
INSERT INTO @Hours VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12) 
          ,(13),(14),(15),(16),(17),(18),(19),(20),(21),(22),(23); 

但是,無論我怎麼加入它,它並沒有達到預期的效果。

我該如何繼續?我是否添加額外的列以加入?完全不同的方法?任何暗示正確的方向表示讚賞!

+1

我確定左加入可以在這裏有所幫助。 select * from hours a left join yourtable b where a.hour = b.hour; 這樣的事情應該工作。 –

+0

@ user1412869這是我嘗試的第一件事 –

回答

4

使用派生表的不同Id十字架加入到@Hours,左加入到你的餐桌:

select 
    i.Id 
    , h.Hour 
    , coalesce(t.Counts,0) as Counts 
from (select distinct Id from t) as i 
    cross join @Hours as h 
    left join t 
    on i.Id = t.Id 
    and h.Hour = t.HourOfDay 

rextester演示:http://rextester.com/XFZYX88502

回報:

+----+------+--------+ 
| Id | Hour | Counts | 
+----+------+--------+ 
| 1 | 0 |  0 | 
| 1 | 1 |  0 | 
| 1 | 2 |  0 | 
| 1 | 3 |  0 | 
| 1 | 4 |  0 | 
| 1 | 5 |  5 | 
| 1 | 6 |  0 | 
| 1 | 7 |  0 | 
| 1 | 8 |  0 | 
| 1 | 9 |  0 | 
| 1 | 10 |  0 | 
| 1 | 11 |  0 | 
| 1 | 12 |  0 | 
| 1 | 13 |  10 | 
| 1 | 14 |  0 | 
| 1 | 15 |  0 | 
| 1 | 16 |  0 | 
| 1 | 17 |  0 | 
| 1 | 18 |  0 | 
| 1 | 19 |  0 | 
| 1 | 20 |  0 | 
| 1 | 21 |  0 | 
| 1 | 22 |  0 | 
| 1 | 23 |  3 | 
| 2 | 0 |  0 | 
| 2 | 1 |  0 | 
| 2 | 2 |  0 | 
| 2 | 3 |  0 | 
| 2 | 4 |  0 | 
| 2 | 5 |  0 | 
| 2 | 6 |  0 | 
| 2 | 7 |  0 | 
| 2 | 8 |  0 | 
| 2 | 9 |  1 | 
| 2 | 10 |  0 | 
| 2 | 11 |  0 | 
| 2 | 12 |  0 | 
| 2 | 13 |  0 | 
| 2 | 14 |  0 | 
| 2 | 15 |  0 | 
| 2 | 16 |  0 | 
| 2 | 17 |  0 | 
| 2 | 18 |  0 | 
| 2 | 19 |  0 | 
| 2 | 20 |  0 | 
| 2 | 21 |  0 | 
| 2 | 22 |  0 | 
| 2 | 23 |  0 | 
+----+------+--------+ 
+0

目前試圖將其實施到我的解決方案中,一旦我得到任何結果,將讓你知道。 –

+0

像魔術一樣,對於遲到的反應,網絡呃逆感到抱歉。 –

+0

@VadzimSavenok高興地幫忙! – SqlZim

相關問題