【发布时间】:2014-04-18 17:36:17
【问题描述】:
我有三个表 - 第一个包含具有唯一 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
我在这里发现了几个我一直在使用的非常好的线程:
Simple way to transpose columns and rows in Sql?
T-SQL Pivot/Unpivot(Transpose) Column Headers Needed as Data Rows
还有一个:
Transpose rows into columns in 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;
返回但仍然不是我需要的。
创建新表格对我来说是不可行的,所以理想情况下我在这里寻找一种动态方法,它用于报告,所以在我看来视图是最简单/最好的,但我愿意接受建议。
谢谢。
【问题讨论】:
标签: sql sql-server transpose