将行转换为没有聚合的列

试图找出如何编写一个dynamic的数据透视表语句。 TEST_NAME最多可以有12个不同的值(因此有12列)。 一些VAL将是Int,Decimal或Varchar数据types。 我所看到的大部分例子都包含了一些汇总内容。 我正在寻找一个直接的价值枢纽。

 Source Table ╔═══════════╦══════╦═══════╗ ║ TEST_NAME ║ SBNO ║ VAL ║ ╠═══════════╬══════╬═══════╣ ║ Test1 ║ 1 ║ 0.304 ║ ║ Test1 ║ 2 ║ 0.31 ║ ║ Test1 ║ 3 ║ 0.306 ║ ║ Test2 ║ 1 ║ 2.3 ║ ║ Test2 ║ 2 ║ 2.5 ║ ║ Test2 ║ 3 ║ 2.4 ║ ║ Test3 ║ 1 ║ PASS ║ ║ Test3 ║ 2 ║ PASS ║ ╚═══════════╩══════╩═══════╝ Desired Output ╔══════════════════════════╗ ║ SBNO Test1 Test2 Test3 ║ ╠══════════════════════════╣ ║ 1 0.304 2.3 PASS ║ ║ 2 0.31 2.5 PASS ║ ║ 3 0.306 2.4 NULL ║ ╚══════════════════════════╝ 

PIVOT函数需要一个聚合才能使其工作。 看来你的VAL列是一个varchar所以你将不得不使用MAXMIN集合函数。

如果testing次数有限,则可以对这些值进行硬编码:

 select sbno, Test1, Test2, Test3 from ( select test_name, sbno, val from yourtable ) d pivot ( max(val) for test_name in (Test1, Test2, Test3) ) piv; 

看演示与SQL小提琴 。

在你的OP中,你表示你将有更多的行来变成列。 如果是这样的话,那么你可以使用dynamicSQL:

 DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX) select @cols = STUFF((SELECT distinct ',' + QUOTENAME(TEST_NAME) from yourtable FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query = 'SELECT sbno,' + @cols + ' from ( select test_name, sbno, val from yourtable ) x pivot ( max(val) for test_name in (' + @cols + ') ) p ' execute(@query) 

看演示与SQL小提琴 。

两个版本都会得到相同的结果:

 | SBNO | TEST1 | TEST2 | TEST3 | --------------------------------- | 1 | 0.304 | 2.3 | PASS | | 2 | 0.31 | 2.5 | PASS | | 3 | 0.306 | 2.4 | (null) | 

没有任何方法没有汇总的PIVOT。

 CREATE TABLE #table1 ( TEST_NAME VARCHAR(10), SBNO VARCHAR(10), VAL VARCHAR(10) ); INSERT INTO #table1 (TEST_NAME, SBNO, VAL) VALUES ('Test1' ,'1', '0.304'), ('Test1' ,'2', '0.31'), ('Test1' ,'3', '0.306'), ('Test2' ,'1', '2.3'), ('Test2' ,'2', '2.5'), ('Test2' ,'3', '2.4'), ('Test3' ,'1', 'PASS'), ('Test3' ,'2', 'PASS') WITH T AS ( SELECT SBNO, VAL, TEST_NAME FROM #table1 ) SELECT * FROM T PIVOT (MAX(VAL) FOR TEST_NAME IN([Test1], [Test2], [Test3])) P 

解决方法可能是确保强制性聚合只应用于单个logging。 在Excel中,例如输出可以是:

SO15674373的例子

其中行标签在底部包含具有唯一索引号的单元格列。

Interesting Posts