2017-11-04 107 views
2

小時前我問了類似的問題。 Previous Question將缺失的行添加到結果集中

這一次情況不同了

我有一個事實和維度表。前面的問題相比,我的事實表中有使用下面的查詢

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 

你看有缺失的標題中所謂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') 

一個額外的字段結果。例如,第一組('HFI'組)沒有'AF'和'AL','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中。

有什麼辦法我們只使用一個查詢來獲得最終結果?

回答

1

如果previous suggestion爲你工作,那麼你可以做的加入,結果回來的fact表類似的東西,並用​​3210更換金額以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

+0

工作很好。再次感謝。 – FLICKER