[英]SQL Multiply Case Count
我有以下SQL語句,該語句包含在某些情況下需要進行案例計數的部分:
select casedate
, category
, casenumber
, IncidentInfo
, num2report1
, notes
, COUNT(CASE WHEN geocat1=1 THEN 1 END) AS 'Category 1'
, COUNT(CASE WHEN geocat2=2 THEN 1 END) AS 'Category 2'
, COUNT(CASE WHEN geocat3=3 THEN 1 END) AS 'Category 3'
, COUNT(CASE WHEN geocat4=4 THEN 1 END) AS 'Category 4'
from incident
where casedate between '12/01/2017' and '12/31/2017'
group by casenumber
, casedate
, category
, notes
, incidentinfo
, num2report1
order by casedate desc
我需要做的是將該類別的計數值乘以num2report1字段。
我正在努力工作。 做到這一點的最佳方法是什么?
您可以嘗試以下方法:
select casedate, category , casenumber , IncidentInfo ,
num2report1, notes ,
num2report1*COUNT(CASE WHEN geocat1=1 THEN 1 END) AS 'Category 1',
num2report1*COUNT(CASE WHEN geocat2=2 THEN 1 END) AS 'Category 2',
num2report1*COUNT(CASE WHEN geocat3=3 THEN 1 END) AS 'Category 3',
num2report1*COUNT(CASE WHEN geocat4=4 THEN 1 END) AS 'Category 4'
from incident
where casedate between '12/01/2017' and '12/31/2017'
group by casenumber, casedate, category, notes, incidentinfo, num2report1
order by casedate desc
順便說一句,這應該得到相同的結果:
select casedate, category , casenumber , IncidentInfo ,
num2report1, notes ,
SUM(CASE WHEN geocat1=1 THEN num2report1 END) AS 'Category 1',
SUM(CASE WHEN geocat2=2 THEN num2report1 END) AS 'Category 2',
SUM(CASE WHEN geocat3=3 THEN num2report1 END) AS 'Category 3',
SUM(CASE WHEN geocat4=4 THEN num2report1 END) AS 'Category 4'
from incident
where casedate between '12/01/2017' and '12/31/2017'
group by casenumber, casedate, category, notes, incidentinfo, num2report1
order by casedate desc
也許您需要:
select casedate, category, casenumber, IncidentInfo, num2report1, notes,
SUM(CASE WHEN geocat1 = 1 THEN 1 ELSE 0 END) AS 'Category 1',
SUM(CASE WHEN geocat2 = 2 THEN 1 ELSE 0 END) AS 'Category 2',
SUM(CASE WHEN geocat3 = 3 THEN 1 ELSE 0 END) AS 'Category 3',
SUM(CASE WHEN geocat4 = 4 THEN 1 ELSE 0 END) AS 'Category 4'
num2report1 * COUNT(*) AS t_count
from incident
where casedate between '12/01/2017' and '12/31/2017'
group by casedate, category, casenumber, IncidentInfo, num2report1, notes
order by casedate desc;
但是,我認為是這樣的:
select casedate, category, casenumber, IncidentInfo, num2report1, notes,
SUM(CASE WHEN geocat1 = 1 THEN 1 ELSE 0 END) AS 'Category 1',
SUM(CASE WHEN geocat2 = 2 THEN 1 ELSE 0 END) AS 'Category 2',
SUM(CASE WHEN geocat3 = 3 THEN 1 ELSE 0 END) AS 'Category 3',
SUM(CASE WHEN geocat4 = 4 THEN 1 ELSE 0 END) AS 'Category 4',
num2report1 * cnt AS t_count
from incident cross join
(select count(distinct category) as cnt from incident) as cnt
. . . ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.