Reputation: 23
Ok, so I have the following query but I'm trying to wrap my head around how to make give me daily results within the given date range. As of right now, this is basically the query I have:
SELECT Source = CASE WHEN Project = 'CODE' OR Code = '1' THEN 'SOURCE1'
WHEN Project <> 'CODE' AND Code = '2' THEN 'SOURCE2'
WHEN Project <> 'CODE' AND Code = '3' THEN 'SOURCE3'
WHEN Project <> 'CODE' AND Code = '4' THEN 'SOURCE4'
ELSE Code END, Count(Document) as TotalCount, SUM(Amount) as TotalAmount
-- Joins here to gather and refine data collected
WHERE Date >= '03/20/2017'
AND Date < '03/23/2017'
GROUP BY CASE WHEN Project = 'CODE' OR Code = '1' THEN 'SOURCE1'
WHEN Project <> 'CODE' AND Code = '2' THEN 'SOURCE2'
WHEN Project <> 'CODE' AND Code = '3' THEN 'SOURCE3'
WHEN Project <> 'CODE' AND Code = '4' THEN 'SOURCE4'
ELSE Code END
ORDER BY TotalCount DESC
Which gives:
SOURCE1 123 1225
SOURCE2 23 126
SOURCE3 17 78
SOURCE4 12 56
MISCSOURCE1 6 78
Ideally it'd give me:
Date Source TotalCount TotalAmount
2017-03-20 SOURCE1 60 625
2017-03-20 SOURCE2 13 60
-- etc
2017-03-21 SOURCE1 63 600
2017-03-21 SOURCE2 10 66
-- etc
It would also have to give individual MISCSOURCEs (i.e. 1/+ extra sources besides the main 4 that are re-labeled) total counts and amounts. How would I go about doing this? Thanks in advance for helping a newbie out!
Upvotes: 2
Views: 69
Reputation: 686
It sounds like you're looking to aggregate on the date field. So adjusting your logic to be something like this may work for you:
SELECT [Date]
, 'SOURCE' + Code AS Source
, COUNT(Document) as TotalCount
, SUM(Amount) as TotalAmount
--FROM...
GROUP BY [Date], 'SOURCE' + Code
ORDER BY COUNT(Document) DESC
This should give you a more similar output to what you're requesting. You may have to add an extra bit of logic back in if you indeed have instances where 'Code' does not equal 1 sometimes for Source1's. Making the following adjustment may work:
SELECT [Date]
, 'SOURCE' + CASE WHEN Project = 'CODE' OR Code = '1' THEN '1' ELSE Code END AS Source
, COUNT(Document) as TotalCount
, SUM(Amount) as TotalAmount
--FROM...
GROUP BY [Date]
, 'SOURCE' + CASE WHEN Project = 'CODE' OR Code = '1' THEN '1' ELSE Code END
ORDER BY COUNT(Document) DESC
That should do it.
Upvotes: 1
Reputation: 23
@ChadPortman was close, only was missing Date in the Group By section. Final query looks like this:
SELECT Date, Source = CASE WHEN Project = 'CODE' OR Code = '1' THEN 'SOURCE1'
WHEN Project <> 'CODE' AND Code = '2' THEN 'SOURCE2'
WHEN Project <> 'CODE' AND Code = '3' THEN 'SOURCE3'
WHEN Project <> 'CODE' AND Code = '4' THEN 'SOURCE4'
ELSE Code END, Count(Document) as TotalCount, SUM(Amount) as TotalAmount
-- Joins here to gather and refine data collected
WHERE Date >= '03/20/2017'
AND Date < '03/23/2017'
GROUP BY Date, CASE WHEN Project = 'CODE' OR Code = '1' THEN 'SOURCE1'
WHEN Project <> 'CODE' AND Code = '2' THEN 'SOURCE2'
WHEN Project <> 'CODE' AND Code = '3' THEN 'SOURCE3'
WHEN Project <> 'CODE' AND Code = '4' THEN 'SOURCE4'
ELSE Code END
ORDER BY Date, TotalCount DESC
This gives me exactly what I needed. Thank you all for your replies!
Upvotes: 0
Reputation: 1226
If you just add date to the select and the group by you should get what you are looking for I think. Like this:
SELECT Date,Source = CASE WHEN Project = 'CODE' OR Code = '1' THEN 'SOURCE1'
WHEN Project <> 'CODE' AND Code = '2' THEN 'SOURCE2'
WHEN Project <> 'CODE' AND Code = '3' THEN 'SOURCE3'
WHEN Project <> 'CODE' AND Code = '4' THEN 'SOURCE4'
ELSE Code END, Count(Document) as TotalCount, SUM(Amount) as TotalAmount
-- Joins here to gather and refine data collected
WHERE Date >= '03/20/2017'
AND Date < '03/23/2017'
GROUP BY CASE WHEN Project = 'CODE' OR Code = '1' THEN 'SOURCE1'
WHEN Project <> 'CODE' AND Code = '2' THEN 'SOURCE2'
WHEN Project <> 'CODE' AND Code = '3' THEN 'SOURCE3'
WHEN Project <> 'CODE' AND Code = '4' THEN 'SOURCE4'
ELSE Code END
ORDER BY date,TotalCount DESC
Upvotes: 0