Azure SQL dw のピボットで奇妙な問題に直面しています。以下のようにステージングテーブルに2行あります
Select Flag, Number,Value,Interest from stg.tableA where Number = 400799074
Flag Number Value Interest
Federal 0400799074 12540.8 0
Provincial 0400799074 248.97 -0.01
宛先テーブルをピボットして入力するクエリは次のとおりです
SELECT
Number
,MAX(CASE WHEN Flag = 'Federal' THEN ISNULL(stg.[Value], 0) ELSE 0 END) AS [FederalValue]
,MAX(CASE WHEN Flag = 'Provincial' THEN ISNULL(stg.[Value], 0) ELSE 0 END) AS [ProvincialValue]
,MAX(CASE WHEN Flag = 'Federal' THEN ISNULL(stg.[Interest], 0) ELSE 0 END) AS [FederalInterest]
,MAX(CASE WHEN Flag = 'Provincial' THEN ISNULL(stg.[Interest], 0) ELSE 0 END) AS [ProvincialInterest]
FROM
[stg].[TableA] stg
where LoanNumber = 400799074
GROUP BY
stg.Number
私が得る出力は
Number FederalValue ProvincialValue FederalIntrest ProvincialInterest
400799074 12540.8 248.97 0 0
ProvincialInterest が 0 で -0.01 ではない理由がわからないため、何かが欠けています
stg テーブルのデータ型は float で、宛先テーブルは decimal(15,2) です。
else 条件を削除すると、正しい結果が得られますが、「地方」行が存在しないシナリオがあるため、削除できません。
,MAX(CASE WHEN Flag = 'Provincial' THEN ISNULL(stg.[Interest], 0) /*ELSE 0 removed */ END) AS [ProvincialInterest]