2016-09-15 60 views
1

我知道之前已經詢問過相同類型的問題。然而,我沒有成功做我需要做的事情。所以我在問你。將某些列轉置爲行

我有一個client_ID表和一些概率購買不同的產品類別對應於每個客戶端。

Client_ID | Prob_CategoryA | Prob_CategoryB | Prob_CategoryC 

    1     0.2     0.3     0.2 
    2     0.4     0.6     0.7 
    3     0.3     0.7     0.4 

現在我想要做的是將上述表格轉換爲此。

Client_ID | Category Name | Probability 

    1    A    0.2 
    1    B    0.3 
    1    C    0.2 
    2    A    0.4 
    2    B    0.6 
    2    C    0.7 
    3    A    0.3 
    3    B    0.7 
    3    C    0.4 

非常感謝您

+0

非常感謝您的及時響應Jarlh。但是,我怎樣才能獲得類別類型併爲其中的每一個創建一個選擇標準?我只有概率歸於每個類別。我沒有在我的表中列出的類別類型。因此我想不出可以檢索這些類型的方法。 預先感謝您 – Erdem

回答

2

簡單UNPIVOT:

SELECT Client_Id, SUBSTRING(Cat, 14, 1) [Category Name], Probability 
FROM Src 
UNPIVOT (Probability FOR Cat IN (Prob_CategoryA, Prob_CategoryB, Prob_CategoryC)) UP 

結果

Client_Id Category Name Probability 
----------- ------------- ----------- 
1   A    0.2 
1   B    0.3 
1   C    0.2 
2   A    0.4 
2   B    0.6 
2   C    0.7 
3   A    0.3 
3   B    0.7 
3   C    0.4 
+0

非常感謝Pawel。 它只是像魔術一樣工作。 – Erdem

0

使用UNPIVOT

SELECT Client_ID, Cats, Probability 
FROM 
(SELECT Client_ID, Prob_CategoryA, Prob_CategoryB, Prob_CategoryC 
FROM yourTable) t 
UNPIVOT 
(Probability FOR Cats IN (Prob_CategoryA, Prob_CategoryB, Prob_CategoryC) 
) AS c 
0

除了Unpivot(請參閱其他答案),還有UNION。

select Client_ID, 'A' as [Category Name], Prob_CategoryA as Probability 
from yourtable 
UNION ALL 
select Client_ID, 'B', Prob_CategoryB 
from yourtable 
UNION ALL 
select Client_ID, 'C', Prob_CategoryC 
from yourtable; 

聯盟將刪除重複的,但由於該數據應該不會有重複的UNION ALL將快於UNION