2013-03-01 94 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