这次情况不同
我有一个事实和昏暗的表。比较上一个问题,我的事实表有一个额外的字段Amount
create table #fact (SKey int, HT varchar(5), TitleId int, Amount decimal(15,2))
insert into #fact values
(201707, 'HFI', 1, 15000),
(201707, 'HFI', 3, 16000),
(201707, 'HFI', 5, 17000),
(201707, 'HFI', 6, 18000),
(201707, 'REO', 1, 19000),
(201707, 'REO', 2, 20000),
(201707, 'REO', 4, 21000),
(201707, 'REO', 5, 22000)
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, #fact.Amount
from #fact
inner join #dim on #dim.TitleId = #fact.TitleId
order by #fact.SKey, #fact.HT, #fact.TitleId, #dim.Title
返回以下数据
SKey HT TitleId Title Amount
-------- ----- --------- ------- ----------
201707 HFI 1 UK 15000.00
201707 HFI 3 LQ 16000.00
201707 HFI 5 GT 17000.00
201707 HFI 6 ML 18000.00
201707 REO 1 UK 19000.00
201707 REO 2 AF 20000.00
201707 REO 4 AL 21000.00
201707 REO 5 GT 22000.00
您会看到结果中缺少标题。例如,我没有第一组'AF'和'AL'('HFI'设置),'REO'部分没有'LQ'和'ML'。
总之,我将生成以下结果:
SKey HT TitleId Title Amount
-------- ----- --------- ------- ----------
201707 HFI 1 UK 15000.00
201707 HFI 2 AF 0.00 -- missing from first result
201707 HFI 3 LQ 16000.00
201707 HFI 4 AL 0.00 -- missing from first result
201707 HFI 5 GT 17000.00
201707 HFI 6 ML 18000.00
201707 REO 1 UK 19000.00
201707 REO 2 AF 20000.00
201707 REO 3 LQ 0.00 -- missing from first result
201707 REO 4 AL 21000.00
201707 REO 5 GT 22000.00
201707 REO 6 ML 0.00 -- missing from first result
对于缺少的行,我想将Amound显示为0.00
目前我将第一个结果存储到临时表中,然后使用循环/游标将缺少的行添加到int中。
我们是否有任何方法只使用一个查询来获得最终结果?
答案 0 :(得分:1)
如果previous suggestion适合你,那么你可以通过将结果与fact
表一起加入来做类似的事情,并使用coalesce
替换 null 金额为0:
;with f as (
select SKey, HT from fact
group by SKey, HT
), combns as (
select f.SKey, f.HT, dim.TitleId, dim.Title
from f, dim
)
select combns.*, coalesce(fact.Amount, 0) as Amount
from combns
left join fact
on combns.SKey=fact.SKey and
combns.HT=fact.HT and
combns.TitleId=fact.TitleId
请参阅fiddle here。