Microsoft SQL Server-文本的行转列


使用行转列常见的就是数字类的,一般用sum函数就可以实现,最近遇到了一个纯文本形式的,无法通过sum来实现
后来发现max函数居然也可以(min同样可以),max相当于按首字母排序
写下来记录一下

示例如下:
--先创建一个临时表,三个字段分别为ID,文本,序号
序号非必需,也可以通过ROW_NUMBER() OVER (PARTITION BY 。。ORDER BY。。 )来添加序号
CREATE TABLE #test (id INT,texttt NVARCHAR(50),num INT)
INSERT INTO #test ( id, texttt ,num)
VALUES
(1,N'一',1)
,(1,N'二',2)
,(1,N'三',3)
,(1,N'四',4)
,(1,N'一二',5)
,(1,N'三四',6)
,(2,N'一',1)
,(2,N'二',2)
,(2,N'三',3)
,(2,N'四',4)
,(2,N'一二',5)
,(2,N'三四',6)
,(3,N'一',1)
,(3,N'二',2)
,(3,N'三',3)
,(3,N'四',4)
,(3,N'一二',5)
,(3,N'三四',6)
,(4,N'一',1)
,(4,N'二',2)
,(4,N'三',3)
,(4,N'四',4)
,(4,N'一二',5)
,(4,N'三四',6)
,(5,N'一',1)
,(5,N'二',2)
,(5,N'三',3)
,(5,N'四',4)
,(5,N'一二',5)
,(5,N'三四',6)

SELECT * FROM #test --看下临时表内容

SELECT * FROM #test a
PIVOT (MAX(texttt) FOR num IN ([1],[2],[3],[4],[5],[6]) ) b

MAX(texttt) :聚合需要行转列的字段
num IN ([1],[2],[3],[4],[5],[6]) :将序号列对应内容转变为字段值

num IN ([6],[5],[4],[3],[2],[1]):字段值顺序发生变化