在SQL Server中将行转置/旋转到列

安德鲁·雷诺兹81

我有三个表格-第一个表格包含具有唯一ID的问题

QID     | Question  
------------------  
1       | Question 1  
2       | Question 2  
3       | Question 3  
4       | Question 4  
5       | Question 5  

第二个包含这些问题的答案,第一个表中的唯一ID,然后是将答案链接在一起的记录的ID

QID     | Answer | Parent
-------------------------
1       | Yes    | 123
2       | No     | 123  
3       | No     | 123  
4       | Yes    | 123  
5       | Yes    | 123
1       | No     | 124
2       | Yes    | 124  
3       | No     | 124  
4       | No     | 124  
5       | No     | 124

第三个包含有关父级的其他信息

Parent     |      Parent Title
----------------------------------------
123        |      Questionnaire Sample 1
124        |      Questionnaire Sample 2

理想情况下,我想创建一个将数据转置或旋转为更可用格式的视图,我在考虑以下方面:

Parent     | Question 1     | Question 2     | Question 3     | Question 4     | Question 5
123        | Yes            | No             | No             | Yes            | Yes
124        | No             | Yes            | No             | No             | No

我在这里工作过的几个非常好的线程:

在Sql中转置列和行的简单方法?

数据行需要T-SQL数据透视/取消透视(转置)列标题

还有另一个:

将行转置为SQL Server 2008 R2中的列

我从以下方面拉了以下东西

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;

然后,我将其修改为:

SELECT [PARENT], [QUESTION], [ANSWER]
FROM
(
  SELECT B.PARENT_TITLE, C.QUESTION, A.ANSWER
    , row_number() over(partition by a.PARENT
                        order by a.PARENT) seq
  FROM answerTable AS A 
  INNER JOIN parentTable AS B 
    ON A.PARENT = B.PARENT
  INNER JOIN questionTable AS C 
    ON A.QID = C.QID    
) AS P
PIVOT
(
  min(P.RESULT)
  for P.PARENT in ([PARENT], [QUESTION], [ANSWER])
) AS PIV;

哪个返回但仍然不是我需要的。

对我而言,创建新表是不可行的,因此理想情况下,我正在这里寻找一种动态手段,这是为了进行报告,因此我认为视图最简单/最佳,但我愿意接受建议。

谢谢。

院长

以下是动态执行操作的方法:

create table #t1(QID int, Question char(10))
insert #t1 values
(1, 'Question 1'),  
(2, 'Question 2'),  
(3, 'Question 3'),  
(4, 'Question 4'),  
(5, 'Question 5')  

create table #t2 (QID int, Answer char(3), Parent int)
insert #t2 values 
(1,        'Yes',    123),
(2,        'No ',    123),  
(3,        'No ',    123),  
(4,        'Yes',    123),  
(5,        'Yes',    123),
(1,        'No ',    124),
(2,        'Yes',    124),  
(3,        'No ',    124),  
(4,        'No ',    124),  
(5,        'No ',    124)

declare @collist nvarchar(max)
SET @collist = stuff((select distinct ',' + QUOTENAME(Question) 
            FROM #t1 -- your table here
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')
select @collist

declare @q nvarchar(max)
set @q = '
select * 
from (
    select 
    Question, Answer, Parent
        from (
        select #t1.*, #t2.Answer, #t2.parent
        from #t1
        inner join #t2 on #t1.QID = #t2.QID
    ) as x
) as source
pivot (
    max(Answer)
    for Question in (' + @collist + ')
) as pvt
'

exec (@q)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在SQL Server(T-SQL)或SSIS中将行转置为列而不会丢失数据

来自分类Dev

在Cascalog中将行转置/旋转到列?

来自分类Dev

如何在SQL查询中将行转置为列

来自分类Dev

如何在SQL查询中将行转置为列

来自分类Dev

在Oracle SQL中将条件转置列转换为行

来自分类Dev

如何在SQL中将列旋转到行,还将列标题转换为行值?

来自分类Dev

使用SQL Server将列转置为行

来自分类Dev

将行转置为列SQL Server 2014

来自分类Dev

SQL Server:将行转置为列

来自分类Dev

将行旋转到具有SQL Server中的自定义列名的列

来自分类Dev

SQL 将行转置为列

来自分类Dev

如何在具有动态值的SQL或SSIS中将行转置为列

来自分类Dev

如何在Oracle SQL 11G中将列转置为行

来自分类Dev

SQL Server:将行转置为列(n:m关系)

来自分类Dev

在SQL Server 2008 R2上将列转置为行

来自分类Dev

SQL Server:将行转置为列(n:m关系)

来自分类Dev

SQL Server 使用 ID 作为列名将行转置为列

来自分类Dev

SQL Server将行转置到新表中

来自分类Dev

将来自SQL Server查询的数据转置为列

来自分类Dev

SQL 中的转置列

来自分类Dev

将行转置为sql中的列

来自分类Dev

t-sql将列转置为行

来自分类Dev

SQL将行转置为列而不进行聚合

来自分类Dev

Oracle SQL:将多列转置为行

来自分类Dev

在SQL Server中将行更改为列

来自分类Dev

在SQL Server 2012中转置

来自分类Dev

SQL Server转置查询结果

来自分类Dev

转置 SQL Server 查询结果

来自分类Dev

转置列或取消透视SQL查询