我想要加入两个表,但是希望第一个表的列重复第一个表的每个记录。
表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
任何帮助将不胜感激
答案 0 :(得分:2)
您使用cross join
和left 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