2013-03-01 91 views
1

我在轉換列到行時遇到問題,Pivoting似乎沒有以我想要顯示的方式給我結果。SQL行到列轉置

這裏是行的具有樣本數據模式n個:

Coulmn1  Column2 
Customer  C1 
Account  A1 
Transaction T1 
Transaction T2 
Transaction T3 
Account  A2 
Transaction T11 
Transaction T12 
Transaction T13 
Customer  C2 
Account  A11 
Transaction T111 
Transaction T112 
Transaction T113 
Account  A12 
Transaction T1111 
Transaction T1112 
Transaction T1113 

我想它移植到以下格式

Customer Account Transaction 
C1  A1  T1 
C1  A1  T2 
C1  A1  T3 
C1  A2  T11 
C1  A2  T12 
C1  A2  T13 
C2  A11  T111 
C2  A11  T112 
C2  A11  T113 
C2  A12  T1111 
C2  A12  T1112 
C2  A12  T1113 
+2

歡迎來到Stack Overflow!你使用的是什麼RDBMS? – Taryn 2013-03-01 14:23:19

+1

如果您嘗試使用pivot,請發佈代碼。而且,SQL表本質上是無序的。是否有確定這些交易行的id或時間戳? – 2013-03-01 14:28:25

+0

您的數據看起來是分層的:客戶級別0,帳戶-1,反-3。也許這是您需要的,而不是您的SQL版本中可用的。 – Art 2013-03-01 14:38:47

回答

1

這裏是你想要做什麼的MySQL版本。它使用相關的子查詢來獲取客戶和帳戶信息:

select t.Column1, 
     (select column2 from t t2 where t2.column1 = 'Customer' and t2.id <= t.id order by t2.id desc limit 1 
     ) as customer, 
     (select column2 from t t2 where t2.column1 = 'Account' and t2.id <= t.id order by t2.id desc limit 1 
     ) as transaction, 
from t 
where t.column1= 'Transaction' 

這假設您有一個用於排序行的id列。如果沒有,那麼你需要找出一種方法來獲得這樣一個列(ID或時間戳),因爲SQL表本質上是無序的。

該邏輯在其他數據庫中是相似的。但是,代替limit 1,語法可能是select top 1where rownum = 1fetch only 1 row

+0

Nitpicking評論:請檢查您的逗號。 – 2013-03-01 14:37:29

+1

@ PM77-1。 。 。謝謝,我也有錯誤的列名。 – 2013-03-01 14:41:29

+0

我在上面的數據在sql服務器上運行此查詢,但結果只是返回12行有 - 事務C1 C1我 – user2123852 2013-03-01 14:57:05