我有一个事实和昏暗的表
create table #fact (SKey int, HT varchar(5), TitleId int)
insert into #fact values
(201707, 'HFI', 1),
(201707, 'HFI', 3),
(201707, 'HFI', 5),
(201707, 'HFI', 6),
(201707, 'REO', 1),
(201707, 'REO', 2),
(201707, 'REO', 4),
(201707, 'REO', 5)
create table #dim (TitleId int, Title varchar(10))
insert into #dim values
(1, 'UK'),
(2, 'AF'),
(3, 'LQ'),
(4, 'AL'),
(5, 'GT'),
(6, 'ML')
使用以下查询
select #fact.SKey, #fact.HT, #fact.TitleId, #dim.Title
from #fact
inner join #dim on #dim.TitleId = #fact.TitleId
order by #fact.SKey, #fact.HT, #fact.TitleId, #dim.Title
返回以下数据
SKey HT TitleId Title
-------- ----- --------- -------
201707 HFI 1 UK
201707 HFI 3 LQ
201707 HFI 5 GT
201707 HFI 6 ML
201707 REO 1 UK
201707 REO 2 AF
201707 REO 4 AL
201707 REO 5 GT
您会看到结果中缺少标题。例如,我没有第一组'AF'和'AL'('HFI'设置),'REO'部分没有'LQ'和'ML'。
总之,我将生成以下结果
SKey HT TitleId Title
-------- ----- --------- -------
201707 HFI 1 UK
201707 HFI 2 AF -- missing from first result
201707 HFI 3 LQ
201707 HFI 4 AL -- missing from first result
201707 HFI 5 GT
201707 HFI 6 ML
201707 REO 1 UK
201707 REO 2 AF
201707 REO 3 LQ -- missing from first result
201707 REO 4 AL
201707 REO 5 GT
201707 REO 6 ML -- missing from first result
目前我将第一个结果存储到临时表中,然后使用循环/游标将缺少的行添加到int中。
我们是否有任何方法只使用一个查询来获得最终结果?
答案 0 :(得分:0)
可能是交叉加入,如:
;with f as (
select SKey, HT from fact
group by SKey, HT
)
select f.SKey, f.HT, dim.TitleId, dim.Title
from f, dim;
这是sql fiddle。
答案 1 :(得分:-1)
我认为您希望将其更改为外部联接。
select #fact.SKey, #fact.HT, #fact.TitleId, #dim.Title
from #fact
left join #dim on #dim.TitleId = #fact.TitleId
order by #fact.SKey, #fact.HT, #fact.TitleId, #dim.Title