Jos*_*ger 5 sql reporting survey
我有一个调查数据库,每个问题有一列,每个人回答一行.每个问题的答案值为1到3.
Id Quality? Speed?
-- ------- -----
1 3 1
2 2 1
3 2 3
4 3 2
Run Code Online (Sandbox Code Playgroud)
现在,我需要将结果显示为每个问题一行,每个响应编号都有一列,每列中的值是使用该答案的响应数.最后,我需要计算总分,即1的数量再加上2的数量加上三次数的三倍.
Question 1 2 3 Total
-------- -- -- -- -----
Quality? 0 2 2 10
Speed? 2 1 1 7
Run Code Online (Sandbox Code Playgroud)
有没有办法在基于集合的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
Run Code Online (Sandbox Code Playgroud)
但请记住,当您添加问题甚至潜在答案时,这个数字会迅速膨胀。如果您进行一点规范化,并有一个答案表,其中每个答案都有一行,并带有问题代码或 ID,而不是将它们作为列放在一个表中,情况可能会好得多。它开始看起来有点像实体值对设计,但我认为它足够不同,可以在这里有用。
| 归档时间: |
|
| 查看次数: |
1178 次 |
| 最近记录: |