我有一张桌子:
A | B
---+---
a | 1qw
b | 2q
c | 3s
a | 4sd
b | 5
c | 6
输出表:
a | b | c
---+---+---
1qw| 2q| 3s
4sd| 5 | 6
如何在sql server中获取输出表。这是一个示例,第一列中可能有超过3个不同的记录。
我用过:
select a,b,c from
(select A,B from TABLE) as P
Pivot (max(B) for A in (a,b,c)
这只给了我一行(甚至不正确)。
答案 0 :(得分:0)
当您使用下面的DDL脚本提供完全有效的SQL代码示例(即使没有得到您想要的内容)时,对您来说最简单,也是最容易回答这些类型的问题:
CREATE TABLE #Data( ID INT IDENTITY, A1 CHAR( 1 ), B1 VARCHAR( 5 ))
INSERT INTO #Data
VALUES
( 'a', '1qw' ), ( 'b', '2q ' ), ( 'c', '3s ' ),
( 'a', '4sd' ), ( 'b', '5 ' ), ( 'c', '6 ' )
诀窍是有一个“组ID”列,用于标识a,b,c记录的组(“桶”):
SELECT *, ROW_NUMBER() OVER( PARTITION BY A1 ORDER BY ID ) AS GroupID
FROM #Data
ORDER BY GroupID
我假设您对ID列有“位置依赖”,并且您的组是从ID列的值派生的,即ID = 2的b记录与ID = 1的记录在同一组中。如果您的初始数据设置不同,那么您需要提出自己的如何分配“组ID”的逻辑。
最终的PIVOT查询:
SELECT *
FROM
( SELECT A1, B1, ROW_NUMBER() OVER( PARTITION BY A1 ORDER BY ID ) AS GroupID
FROM #Data ) AS data
PIVOT(
MAX( B1 ) FOR A1 IN( [a], [b], [c] )
) AS P
输出:
GroupID a b c
-------------------- ----- ----- -----
1 1qw 2q 3s
2 4sd 5 6
参考文献:https://docs.microsoft.com/en-us/sql/t-sql/queries/from-using-pivot-and-unpivot