T-Sql选择使用join重复列值

时间:2014-07-21 19:21:17

标签: sql sql-server tsql

我想要加入两个表,但是希望第一个表的列重复第一个表的每个记录。

表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

我希望我的结果使用表B中“SomeText”列中的每个唯一文本重复表A中的所有行,并且计数仅显示在其相关日期和小时内。

结果就像是:

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

任何帮助将不胜感激

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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