SQL将结果显示为行中的列

时间:2018-08-14 13:06:20

标签: sql sql-server tsql pivot

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 |
+-----------+-----------+---------------------+----------+--------+--------+

总是会有相同数量的值,而且我几乎可以确定解决方案涉及创建一个临时表,但是我无法使其以任何一种方式工作。

任何帮助将不胜感激。

2 个答案:

答案 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

结果:

enter image description here

相关问题