I am looking for a way to group data by status. I have this with a simple select, just for demonstration:
MS SQL Server 2014 Schema Setup:
CREATE TABLE Projects ([ID] int, [Project] varchar(10));
INSERT INTO Projects ([ID], [Project])
VALUES
(1, 'Admin'),
(2, 'Accounts'),
(3, 'Finance')
;
CREATE TABLE Tasks ([ID] int, [ProjectID] int, [Task] int, [Status] varchar(8));
INSERT INTO Tasks
([ID], [ProjectID], [Task], [Status])
VALUES
(1, 1, '001', 'Open'),
(2, 1, '002', 'Canceled'),
(3, 1, '003', 'Canceled'),
(4, 1, '004', 'Canceled'),
(5, 2, '005', 'Rejected'),
(6, 2, '006', 'Canceled'),
(7, 2, '007', 'Canceled'),
(8, 3, '008', 'Canceled'),
(9, 3, '009', 'Canceled'),
(10, 3, '010', 'Canceled'),
(11, 3, '011', 'Canceled'),
(12, 3, '0012', 'Rejected')
;
Query 1:
SELECT
Projects.Project,
COUNT(Tasks.Status) AS Total
FROM
Projects
LEFT JOIN Tasks ON Projects.ID = Tasks.ProjectID
GROUP BY
Projects.Project
| Project | Total |
|----------|-------|
| Accounts | 3 |
| Admin | 4 |
| Finance | 5 |
But I am looking for a way to output this:
| Project | Open | Canceled | Rejected |
|----------|------|----------|----------|
| Admin | 1 | 3 | |
| Accounts | | 2 | 1 |
| Finance | | 4 | 1 |
The desired result groups the Project by Tasks Status. How can I do this? Thanks.