0
我得到了一張需要提取和歸一化的數據表。它看起來像這樣:具有不同數量列的Unpivot
AccountName BrandCoke BrandPepsi BrandDiet SalesCoke SalesPepsi SalesDiet
Account1 X X 100 200
Account2 X X 300 400
Account3 X 500
我需要正常化它,轉換列行,像這樣:
AccountName Brand Sales
Account1 Coke 100
Account1 Pepsi 200
Account2 Pepsi 300
Account2 Diet 400
Account3 Coke 500
它看起來像一個很好的候選人使用UNPIVOT
,但我不知道該如何解釋品牌的名稱取決於第2-4列中是否有「X」,以及如果該品牌列中有「X」,我只需要一個品牌排即可。 (因此,只有5行應產生,而不是9)
我其他的想法是使用UNPIVOT
之前這樣做的SQL2000的方式,做獨立的SELECTS
這樣的:
SELECT AccountName, Brand='Coke', Sales = SalesCoke FROM T WHERE BrandCoke = 'X'
UNION
SELECT AccountName, Brand='Pepsi', Sales = SalesPepsi FROM T WHERE BrandPepsi = 'X'
UNION
SELECT AccountName, Brand='Diet', Sales = SalesDiet FROM T WHERE BrandDiet = 'X'
但是,這似乎相當不雅。
這可以很容易地用UNPIVOT完成,或者是UNIONing多個SELECT更好的解決方案嗎?