Sql 将列记录作为列名
我有一张桌子:Sql 将列记录作为列名,sql,sql-server,Sql,Sql Server,我有一张桌子: 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,
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)
这只给了我1行(甚至不正确)。当您使用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
参考资料:Research
PIVOT
我想这将获得至少2倍的反对票,最好是增加一些努力或尽快删除这个问题,否则这几乎就要实现了。我不知道为什么这会被投票关闭,因为不清楚你在问什么?问题很清楚,这只是一个非常简单的问题。@Alex你能给我一个代码片段/链接吗。“我看着pivot,不幸的是我无法理解。”KingKing善意地向我解释,我如何才能更努力地解释我认为已经完美解释的东西。