I have a problem writing the sql query that will group a datetime column (Modified) into days, and for each day give me the count of a value of another field, Status which can be either 1 or 2.
I have tried with just getting the count of status=1, but even this doesn’t give my what I want:
x
SELECT DateValue([a.Modified]) AS Expr1, Count(b.Modified) AS Total
FROM MyTable AS a LEFT JOIN (SELECT Modified FROM MyTable WHERE Status = 1) AS b ON
a.Modified = b.Modified
GROUP BY DateValue([a.Modified]);
Below are some sample data and the results I want.
Modified Status
01-10-2004 20:17:00 1
01-10-2004 20:17:00 2
02-10-2004 11:53:31 1
02-10-2004 11:53:31 2
02-10-2004 11:55:26 2
02-10-2004 11:55:26 1
02-10-2004 12:00:56 2
02-10-2004 12:02:39 2
02-10-2004 12:04:28 1
02-10-2004 12:04:28 2
02-10-2004 12:06:18 2
02-10-2004 12:08:19 1
02-10-2004 12:08:19 2
02-10-2004 12:09:50 2
02-10-2004 12:09:50 1
02-10-2004 12:11:21 2
02-10-2004 12:11:22 1
02-10-2004 12:12:41 2
02-10-2004 12:12:41 1
03-10-2004 09:27:20 1
03-10-2004 09:27:20 2
Expected results:
Modified Status1Count Status2Count
02-10-2004 7 10
Advertisement
Answer
This should give you what you are after:
SELECT
CAST(Modified AS DATE) AS DateValue,
SUM(CASE WHEN [Status] = 1 THEN 1 ELSE 0 END) AS Status1Count,
SUM(CASE WHEN [Status] = 2 THEN 1 ELSE 0 END) AS Status2Count
FROM MyTable
GROUP BY
CAST(Modified AS DATE)