簡體   English   中英

SQL乘法案例數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM