Hi,
I am want to sum the counts based on the status from a table. Is there a way to add the sums to the select statement? I have 3 different statuses: 0, 1 and 2. I would like to get sum of counts 1 and sum of counts 0 and 2.
select productCode,COUNT(productCode) As Count,status
from GameBanks
where requestDateTime >= '20191118' and requestDateTime < '20191121'
group by productCode,status
please click arrow to the left for drop create data ...
drop table #GameBanks
go
create table #GameBanks
(
productCode int ,
status int ,
requestDateTime date
)
go
insert into #GameBanks select 1,1,'20191119'
insert into #GameBanks select 1,2,'20191120'
insert into #GameBanks select 1,1,'20191119'
insert into #GameBanks select 1,2,'20191120'
insert into #GameBanks select 1,0,'20191120'
insert into #GameBanks select 2,0,'20191119'
insert into #GameBanks select 2,1,'20191119'
insert into #GameBanks select 2,2,'20191120'
insert into #GameBanks select 2,0,'20191120'
insert into #GameBanks select 2,0,'20191120'
insert into #GameBanks select 2,1,'20191119'
insert into #GameBanks select 2,2,'20191119'
insert into #GameBanks select 2,1,'20191120'
insert into #GameBanks select 2,1,'20191120'
insert into #GameBanks select 2,2,'20191120'
go
select 'sample data',* from #GameBanks
go
please click arrow to the left for SQL
; WITH cte
AS (SELECT productcode,
status,
Count(status) AS cnt
FROM #gamebanks
WHERE requestdatetime >= '20191118'
AND requestdatetime < '20191121'
GROUP BY productcode,
status)
SELECT 'SQL Output',
*,
Sum(cnt)
OVER(
partition BY productcode ) AS sumofcounts
FROM cte
please click arrow to the left for ANOTHER WAY sql
; WITH cte
AS (SELECT productcode,
status,
Count(status) AS cnt
FROM #gamebanks
WHERE requestdatetime >= '20191118'
AND requestdatetime < '20191121'
GROUP BY productcode,
status),
cte_sumcounts
AS (SELECT productcode,
Count(status) AS cntstat
FROM #gamebanks
GROUP BY productcode)
SELECT 'SQL OUTPUT',
b.*,
a.cntstat
FROM cte_sumcounts a
JOIN cte b
ON a.productcode = b.productcode
go
; WITH cte
AS (SELECT productcode,
Sum(CASE
WHEN status IN ( 0, 2 ) THEN 1
ELSE 0
END) AS SumOf0And2s,
Sum(CASE
WHEN status IN ( 1 ) THEN 1
ELSE 0
END) AS SumOf1s
FROM #gamebanks
WHERE requestdatetime >= '20191118'
AND requestdatetime < '20191121'
GROUP BY productcode)
SELECT 'SQL productCode, SumOf1s,SumOf0And2s',
*
FROM cte
go
What is the difference between your query and this one? They both seem returning the same result.
SELECT productcode, Sum(CASE WHEN status IN ( 0, 2 ) THEN 1 ELSE 0 END) AS 'CANCEL\UNCERTAIN', Sum(CASE WHEN status IN ( 1 ) THEN 1 ELSE 0 END) AS CONFIRM FROM GameConfirmResponses WHERE requestdatetime >= '20191118' AND requestdatetime < '20191121' GROUP BY productcode
@harishgg1 I have one more question; I have a similar table. Can I merge/sum the results?
Here is the other table query: SELECT productcode, Sum(CASE WHEN status IN ( 0, 2 ) THEN 1 ELSE 0 END) AS 'CANCEL\UNCERTAIN', Sum(CASE WHEN status IN ( 1 ) THEN 1 ELSE 0 END) AS CONFIRM FROM **GameBanks** WHERE requestdatetime >= '20191118' AND requestdatetime < '20191121' GROUP BY productcode