簡體   English   中英

T-Sql選擇以使用連接重復列值

[英]T-Sql Select for repeating a column value using join

我有兩個要聯接的表,但要為第一個表的每個記錄重復第二個表的一列。

表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的所有行以及表B的“ SomeText”列中的每個唯一文本,並且計數僅顯示其相對日期和小時。

因此結果將是:

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

任何幫助將不勝感激

您可以通過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;

聽起來您想要的是在表A中的每個日期和小時以及在表B中存在的每個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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM