我有一个包含9列的表格。当我对表进行插入时,它会插入14行。 (回答14个问题)。
我想要完成的是水平显示数据。
这是我执行select语句时返回数据的方式
SELECT * FROM TABLE1 where UID = '00000'
每个UID
将有14个问题和答案。有些可能是空的。
我想要做的是以横向格式显示这些数据。
除了答案之外,大多数列都是相同的,问题会发生变化。
所以我要显示的是,当我为特定select
执行UID
语句时,要显示其他行中的第一个第一行+ questions
和answers
第一行。
我能够使用汇总表完成此操作,但我想找到一个更简单的解决方案,我不必创建其他表,也许我只需要一个可以从中提取数据的视图。
我需要输出用于报告目的。
答案 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])