sql – PIVOT行返回到返回值超过1的列
发布时间:2020-12-12 07:48:38 所属栏目:MsSql教程 来源:网络整理
导读:我目前正在开发一个有两个表设置的系统: Table_1-------IDTable2IDValueTable_2--------IDColumnName 每个表的一些模拟结果: Table_1Table2ID | Value---------------1 | ABCD1 | EFGH1 | IJKL2 | MNOP2 | QRST2 | UVWXTable_2ID | ColumnName-------------
我目前正在开发一个有两个表设置的系统:
Table_1 ------- ID Table2ID Value Table_2 -------- ID ColumnName 每个表的一些模拟结果: Table_1 Table2ID | Value --------------- 1 | ABCD 1 | EFGH 1 | IJKL 2 | MNOP 2 | QRST 2 | UVWX Table_2 ID | ColumnName -------------------- 1 | First_Set 2 | Second_Set 所以,我有以下查询,试图将Table_2的行结果转换为列 SELECT * FROM( SELECT B.ColumnName,A.Value FROM Table_1 AS A INNER JOIN Table_2 AS B ON A.Table2ID = B.ID ) AS P PIVOT ( min(P.Value) for P.ColumnName in ([First_Set],[Second_Set]) ) AS PIV 问题在于,正如它所写,我得到了一个结果.我的返回值将是这样的: First_Set | Second_Set ------------------------- ABCD | MNOP 我想要的是每列的所有结果,但是我还没有找到使用PIVOT的方法让我这样做. 有没有人有关于将行转换为列然后为每列接收多个结果的最佳方法的建议? 解决方法PIVOT需要使用聚合函数来获取结果,在您使用min函数的情况下,在您的查询中,它将仅返回First_Set和Second_Set的一个值.我建议在应用PIVOT时包含一个用于保持行不同的列.对于您的数据,我建议使用row_number()为集合中的每个项目生成唯一值.然后,该值将用于PIVOT的分组方面: SELECT [First_Set],[Second_Set] FROM ( SELECT B.ColumnName,A.Value,row_number() over(partition by a.Table2ID order by a.Value) seq FROM Table_1 AS A INNER JOIN Table_2 AS B ON A.Table2ID = B.ID ) AS P PIVOT ( min(P.Value) for P.ColumnName in ([First_Set],[Second_Set]) ) AS PIV; 见SQL Fiddle with Demo.这将给出一个结果: | FIRST_SET | SECOND_SET | | ABCD | MNOP | | EFGH | QRST | | IJKL | UVWX | (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |