SQL Survey数据库-数据库结构是否允许这样做?

时间:2019-03-05 14:24:42

标签: sql select group-by survey

我有一个具有特定结构的调查数据库(以允许在同一数据库中进行多个不同的调查):每个受访者针对他们回答的每个问题获得一行,而不是针对每个问题获得多列的一行。像这样:

Respondent|Question|Answer|  Broker  | Year |
----------|--------|------|----------|------|
Person1   |    a   |   2  | Broker X | 2018 |
Person1   |    b   |   3  | Broker X | 2018 |
Person1   |    c   |   5  | Broker X | 2018 |
Person2   |    a   |   5  | Broker X | 2018 |
Person2   |    a   |   3  | Broker Y | 2018 |

我可以使用“ GROUP BY”运行基本查询,以得到一个表,对2018年每个问题的每个经纪人进行排名。但是,鉴于上述结构,可以在同一表中同时获得2018年和每个经纪人2017年?还是在逻辑上不可能?

谢谢!

编辑:对不起,还不清楚。我想在一栏中获得2018年的得分,而在另一栏中获得2017年的得分。

2 个答案:

答案 0 :(得分:0)

是的。而不是按年份分组,只需在where子句中限制为2017/2018,例如

GROUP BY Broker
WHERE [Year] in (2017,2018)

答案 1 :(得分:0)

(编辑)我假设“分数”是记录数-如果您想对所有“答案”求和,然后在以下案例中将1替换为answer

您的意思是这样的吗?

select 
  broker, 
  Results2017 = sum(case when Year=2017 then 1 else 0 end)
  Results2018 = sum(case when Year=2018 then 1 else 0 end)
from
  survey
where 
  Year in (2017,2018)
group by 
  broker
order by
  /* this will order by 2018 descending (3rd column) */
  3 desc

这应该给您:

broker  | Results2017  | Results2018
bob     |           2  |           4
Fred    |           6  |           2
Sue     |           4  |           1