一直在摸不着头脑,但我觉得我忽略了明显的答案,我的搜索词都没有导致任何结果。我正在编制一个数据库中的调查结果,如下结构
ID TestName Q1 Q2 Q3 Q4
-- --------- ---- ---- ---- ----
1 test1 1 2 1 1
2 test1 2 3 4 1
3 test2 1 1 4 2
4 test1 2 5 3 4
5 test2 1 5 2 4
我想在每列中对相似的结果进行分组,只要它们共享相同的名称,并从每个相似的结果中获取计数。我的最终输出如下所示,但我试图找出如何在不进行4次单独查询的情况下编写查询。
Test 1
Question 1 Results
1(1)
2(2)
3(0)
4(0)
5(0)
Question 2 Results
1(0)
2(1)
3(1)
4(0)
5(1)
Question 3 Results
1(1)
2(0)
3(1)
4(1)
5(0)
Question 4 Results
1(2)
2(0)
3(0)
4(1)
5(0)
Test 2
Question 1 Results
1(2)
2(0)
3(0)
4(0)
5(0)
Question 2 Results
1(1)
2(0)
3(0)
4(0)
5(1)
Question 3 Results
1(0)
2(1)
3(0)
4(1)
5(0)
Question 4 Results
1(0)
2(1)
3(0)
4(1)
5(0)
答案 0 :(得分:1)
类似
select name, sum(q1), sum(q2), sum(q3), sum(q4)
from tbl
group by name
如果您将q值存储为varchar,则可以在对它们求和之前将它们转换为数字:
sum(cast(q1 as int))
答案 1 :(得分:1)
declare @YourTable table (
id int,
TestName varchar(10),
q1 char(1),
q2 char(1),
q3 char(1),
q4 char(1)
)
insert into @YourTable
(id, TestName, q1, q2, q3, q4)
select 1,'test1','1','2','1','1' union all
select 2,'test1','2','3','4','1' union all
select 3,'test2','1','1','4','2' union all
select 4,'test1','2','5','3','4' union all
select 5,'test2','1','5','2','4'
select TestName,
sum(case when q1 = '1' then 1 else 0 end) as [q1(1)],
sum(case when q1 = '2' then 1 else 0 end) as [q1(2)],
/* ... */
sum(case when q4 = '4' then 1 else 0 end) as [q4(4)],
sum(case when q4 = '5' then 1 else 0 end) as [q4(5)]
from @YourTable
group by TestName