水平显示结果而不创建汇总表

时间:2014-08-20 22:11:59

标签: sql sql-server

我有一个包含9列的表格。当我对表进行插入时,它会插入14行。 (回答14个问题)。

我想要完成的是水平显示数据。

这是我执行select语句时返回数据的方式

SELECT * FROM TABLE1 where UID = '00000'

enter image description here

每个UID将有14个问题和答案。有些可能是空的。

我想要做的是以横向格式显示这些数据。

除了答案之外,大多数列都是相同的,问题会发生变化。

所以我要显示的是,当我为特定select执行UID语句时,要显示其他行中的第一个第一行+ questionsanswers第一行。

我能够使用汇总表完成此操作,但我想找到一个更简单的解决方案,我不必创建其他表,也许我只需要一个可以从中提取数据的视图。

我需要输出用于报告目的。

1 个答案:

答案 0 :(得分:1)

的内容
SELECT 
UID,
MAX([Abid]) AS [Abid], 
MAX([Date]) As [Date], 
Max([Name]) AS [Name], 
Max([No]) AS [No], 
Max([CName]) AS [CName],
MAX(CASE WHEN [QID]=1 THEN [Questions] ELSE NULL END) AS Question1,
MAX(CASE WHEN [QID]=1 THEN [Answers]   ELSE NULL END) AS Answer1,
MAX(CASE WHEN [QID]=2 THEN [Questions] ELSE NULL END) AS Question2,
MAX(CASE WHEN [QID]=2 THEN [Answers]   ELSE NULL END) AS Answer2,
MAX(CASE WHEN [QID]=3 THEN [Questions] ELSE NULL END) AS Question3,
MAX(CASE WHEN [QID]=3 THEN [Answers]   ELSE NULL END) AS Answer3,
MAX(CASE WHEN [QID]=4 THEN [Questions] ELSE NULL END) AS Question4,
MAX(CASE WHEN [QID]=4 THEN [Answers]   ELSE NULL END) AS Answer4,

etc...

MAX(CASE WHEN [QID]=14 THEN [Questions] ELSE NULL END) AS Question14,
MAX(CASE WHEN [QID]=14 THEN [Answers]   ELSE NULL END) AS Answer14
FROM Table1
GROUP BY UID

应该这样做

如果你有一个指数

,它会跑得更快
CREATE UNIQUE CLUSTERED INDEX TABLE1_UID_QID_IX ON [TABLE1]([QID],[AnswerID])