2017-11-04 9 views
2

私は同様の質問を1時間前に尋ねました。 Previous Question結果セットに欠落行を追加する

この時の状況は

私は事実と薄暗いテーブルを持っているとは異なります。前の質問比較すると、私のファクトテーブルには、以下のデータあなたが欠落しているタイトルがである参照

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 

私を返すクエリ

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 

の下に使用して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'はありません。要約すると

私は結果の下に生成するつもりです:私は現在、私は一時テーブルに最初の結果を格納していた後、0.00

としてAmoundを表示する行がないため

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 

ループ/カーソルを使用して欠落行をintに追加します。

最終結果を得るために1つのクエリを使用する方法はありますか?

答えて

1

previous suggestionがあなたのために働く場合、あなたはfact表と裏の結果を結合することにより、類似した何かを、そして0とヌル額を置き換えるために​​3210を使用することができます。

;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

関連する問題