2014-07-21 64 views
0

我有兩個表要加入,但要爲第一個表的每個記錄重複第二個表的列。T-Sql Select用於使用連接重複列值

表A的樣子:

Date  Hour 
7/1/2014 0 
7/1/2014 1 
7/1/2014 2 
. 
. 
. 
7/1/2014 23 

表B的樣子:

Date  Hour SomeText  Count 
7/1/2014 10  TextA   20 
7/1/2014 11  TextA   15 
7/1/2014 10  TextB   35 
7/1/2014 20  TextB   40 

我想我的結果重複從表A中的所有行從表的「SomeText」則會列中的每個唯一的文本B和計數只顯示在他們的相關日期和小時內。

那麼結果會是這樣:

Date  Hout SomeText Count 
7/1/2014 0  TextA  0 
7/1/2014 1  TextA  0 
. 
. 
7/1/2014 10  TextA  20 
7/1/2014 11  TextA  15 
. 
. 
7/1/2014 23  TextA  0 
7/1/2014 0  TextB  0 
7/1/2014 1  TextB  0 
. 
. 
7/1/2014 10  TextB  35 
7/1/2014 11  TextB  0 
. 
. 
7/1/2014 20  TextB  40 
7/1/2014 21  TextB  0 
. 
. 
7/1/2014 23  TextB  0 

任何幫助將不勝感激

+0

你的職位是非常模糊,但也許你想要一個交叉連接? –

+0

我試着添加儘可能多的信息。但交叉加入也添加表A的每一行的Counts againt。而我只是希望計數顯示各自的日期和小時,但「SomeText」列值應重複表A的每一行 – nido

回答

2

你做這種類型的查詢與cross joinleft outer join

select a.date, a.hour, t.text, coalesce(b.count, 0) as count 
from tableA a cross join 
    (select distinct text from tableB b) t left outer join 
    tableB b 
    on b.date = a.date and b.hour = a.hour and b.text = t.text 
order by a.date, a.hour, t.text; 
+0

錯過了默認的ORDER BY ... – PinnyM

+0

那就是我在找的,謝謝 – nido

+0

@PinnyM。 。 。我補充說。 –

2

這聽起來像你希望在表A中的每個日期和時間都有一個條目,並且對於TableB中存在的每個SomeText,填寫缺少的條目,計數爲0

假設這是正確的,你可以做到這一點,像這樣:

SELECT TableA.Date, TableA.Hour, Texts.SomeText, COALESCE(TableB.Counts, 0) 
FROM TableA 
CROSS JOIN (SELECT DISTINCT SomeText FROM TableB) Texts 
LEFT JOIN TableB ON TableA.Date = TableB.Date AND TableA.Hour = TableB.Hour AND Texts.SomeText = TableB.SomeText 
ORDER BY TableA.Date, TableA.Hour, Texts.SomeText