SQL Noob在这里。
我意识到已经提出了对该问题的许多变体,但似乎没有一个奏效或完全适用于我烦人的情况。我认为PIVOT
不能满足我的要求。我无法理解必要的词来有效地搜索我需要的东西。
我有以下查询:
Select w.WORKORDERID, y.Answer
From
[SD].[dbo].[WORKORDERSTATES] w
LEFT JOIN [SD].[dbo].[WO_RESOURCES] x
ON w.workorderid = x.woid
Full Outer Join [SD].[dbo].ResourcesQAMapping y
ON x.UID = y.MAPPINGID
WHERE w.APPR_STATUSID = '2'
AND w.STATUSID = '1'
AND w.REOPENED = 'false'
它将返回以下结果:
+-----------+---------------------+
| WORKORDER | Answer |
+-----------+---------------------+
| 55693 | Brad Pitt |
| 55693 | brad.pitt@mycom.com |
| 55693 | Location |
| 55693 | NULL |
| 55693 | george |
+-----------+---------------------+
我希望与值55693相关的所有行输出为如下列:
+-----------+-----------+---------------------+----------+--------+--------+
| WORKORDER | VALUE1 | VALUE2 | VALUE3 | VALUE4 | VALUE5 |
+-----------+-----------+---------------------+----------+--------+--------+
| 55693 | Brad Pitt | brad.pitt@mycom.com | Location | NULL | george |
+-----------+-----------+---------------------+----------+--------+--------+
总是会有相同数量的值,而且我几乎可以确定解决方案涉及创建一个临时表,但是我无法使其以任何一种方式工作。
任何帮助将不胜感激。
答案 0 :(得分:0)
尝试选择另一列具有不同值的列作为答案列,然后尝试运行数据透视表并且可以运行
答案 1 :(得分:0)
如果始终具有相同数量的值(5),则可以使用静态PIVOT
,否则需要带有PIVOT
的动态TSQL语句。
在两种情况下,您都需要添加一列以保证行/列的顺序,否则不能保证在每一列中看到正确的值。
这是一个示例查询,然后对5个值使用静态PIVOT
(但请记住添加一列以正确排序数据,以ORDER BY WORKORDER
替换为ORDER BY YOUR_COLUMN_NAME
):
declare @tmp table (WORKORDER int, Answer varchar(50))
insert into @tmp values
(55693, 'Brad Pitt')
,(55693, 'brad.pitt@mycom.com')
,(55693, 'Location')
,(55693, 'NULL')
,(55693, 'george')
select * from
(
select
WORKORDER,
Answer,
CONCAT('VALUE', ROW_NUMBER() OVER (PARTITION BY WORKORDER ORDER BY WORKORDER)) AS COL
from @tmp
) as src
pivot
(
max(Answer) for COL in ([VALUE1], [VALUE2], [VALUE3], [VALUE4], [VALUE5])
)
as pvt
结果: