我要求帮助,因为我不太了解SQL。
我需要连接两个表并从第二个表中计算出现一些值以实现类似于将具有coluns的统计表的效果:
结果表:
我的结果表需要有前两列(contry和site)来自第一个表“Violations”和接下来的5个列,它们将包含每个可能的id值中“Violations”中出现的status_id数量(count)状态表。
现在我可以上传我想要实现的表结果图像:
所以,我有两个表:违规和状态。
违反:
状态:
我的联接结果是要有一个应该包含列的表:
我的伪代码和抽象尝试:
SELECT v.country, v.site, count(v.status_id == 1), count(v.status_id == 2), count(v.status_id == 3), count(v.status_id == 4)
FROM Violations v JOIN Status s
ON v.status_id=s.id
GROUP BY v.country, v.site
请求帮我编写正确的sql查询,因为这样做有很大的问题。
答案 0 :(得分:2)
您应该能够使用带有CASE
表达式的聚合函数来获得结果:
select v.country,
v.site,
SUM(case when s.id = 1 then 1 else 0 end) Total_SuspectedViolations,
SUM(case when s.id = 2 then 1 else 0 end) Total_ConfirmedViolations,
SUM(case when s.id = 3 then 1 else 0 end) Total_ConfirmedNoViolations,
SUM(case when s.id = 4 then 1 else 0 end) Total_NotDetermined,
COUNT(*) Total
from violations v
inner join status s
on v.status_id = s.id
group by v.country, v.site
这也可以在没有JOIN
:
select v.country,
v.site,
SUM(case when v.status_id = 1 then 1 else 0 end) Total_SuspectedViolations,
SUM(case when v.status_id = 2 then 1 else 0 end) Total_ConfirmedViolations,
SUM(case when v.status_id = 3 then 1 else 0 end) Total_ConfirmedNoViolations,
SUM(case when v.status_id = 4 then 1 else 0 end) Total_NotDetermined,
COUNT(*) Total
from violations v
group by v.country, v.site