我有一个调查数据库,每个问题一栏,每个回答者一行。每个问题的答案均介于1到3之间。
Id Quality? Speed? -- ------- ----- 1 3 1 2 2 1 3 2 3 4 3 2
现在,我需要将结果显示为每个问题一行,每个响应编号对应一列,每列中的值是使用该答案的响应数量。最后,我需要计算总得分,即1的数量加2的数量的两倍乘以3的数量的三倍。
Question 1 2 3 Total -------- -- -- -- ----- Quality? 0 2 2 10 Speed? 2 1 1 7
有没有办法在基于集合的SQL中做到这一点?我知道如何使用C#中的循环或SQL中的游标来执行此操作,但是我正在尝试使其在不支持游标的报告工具中工作。
这将给您您所要的:
SELECT 'quality' AS question, SUM(CASE WHEN quality = 1 THEN 1 ELSE 0 END) AS [1], SUM(CASE WHEN quality = 2 THEN 1 ELSE 0 END) AS [2], SUM(CASE WHEN quality = 3 THEN 1 ELSE 0 END) AS [3], SUM(quality) FROM dbo.Answers UNION ALL SELECT 'speed' AS question, SUM(CASE WHEN speed = 1 THEN 1 ELSE 0 END) AS [1], SUM(CASE WHEN speed = 2 THEN 1 ELSE 0 END) AS [2], SUM(CASE WHEN speed = 3 THEN 1 ELSE 0 END) AS [3], SUM(speed) FROM dbo.Answers
请记住,这会在您添加问题甚至可能的答案时迅速膨胀。如果稍微标准化一下,并为每个答案都带有一行带有问题代码或ID的答案做一个答案表,而不是将它们作为一列放在一个表中,则可能会更好。它开始看起来有点像实体- 值对设计,但我认为它的区别足以在此处使用。