2016-08-19 9 views
2

T1アンピボットT1から2列のSQL Server

enter image description here

T2結果をマージ

enter image description here

アンピボットクエリ:

SELECT LocM, convert(varchar,[Date],112) as DateKey, FinanceCode, Amount 
FROM SalesDetail 
UNPIVOT 
    ([Amount] FOR [FinanceCode] IN([Sales],[Wages])) AS P 

T3

enter image description here

結果は以下のようになりますので、参加/ T3とT2をマージする方法:

StoreCode | FinanceCode | DateKey | Amount 
070  | Wages  | 20160131 | 3533 
070  | Sales  | 20160131 | 833 
070  | 0000  | 20160131 | 0 

答えて

1

私だけではなく、20160131.

のために、あなたはすべての日付のレコードのように労働組合をしたいと仮定適切な列順序を使用して、T2とT3でUNION ALLを実行するのはなぜですか?

など。

SELECT StoreCode, FinanceCode, DateKey, Amount from T3 
UNION ALL 
SELECT LocM, FinanceCode, DateKey, Amount from T2 

あなたはサブクエリでそれをラップし、あなたには、いくつかのカテゴリから列が隣同士になりたい場合はORDER BYを追加することができます。

+0

各テーブルの列の量が同じでない場合はどうなりますか?たとえば、t2が4列、t3が5列の場合 –

+0

これは基本的なSQLの問題です。 UNION ALLを異なる#列で使用する場合は、欠落している列に表示したい値の定数を追加します。例えば、ここ:http://stackoverflow.com/questions/2309943/unioning-two-tables-with-different-number-of-columns –