如果Result
已知,则可以使用上面的bbrumm的答案。但是,如果有更多的Result
,您可以使用动态交叉分析:
CREATE TABLE Tbl(Code INT, Date Date, Result VARCHAR(10));
INSERT INTO Tbl VALUES
(1, '06/01/2017', 'A'),
(1, '06/03/2017', 'A'),
(2, '06/05/2017', 'A'),
(2, '06/07/2017', 'B'),
(1, '06/01/2017', 'A'),
(1, '06/03/2017', 'B'),
(1, '06/05/2017', 'C'),
(2, '06/07/2017', 'C');
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql =
'SELECT
code
, COUNT(Result) AS TotalCount' + CHAR(10);
SELECT @sql = @sql +
' , SUM(CASE WHEN Result = ''' + Result + ''' THEN 1 ELSE 0 END) AS ' + QUOTENAME('Count' + Result) + CHAR(10)
FROM (SELECT DISTINCT Result FROM Tbl) t;
SELECT @sql = @sql +
'FROM Tbl
GROUP BY Code
ORDER BY Code';
PRINT(@sql);
EXEC sp_executesql @sql;
DROP TABLE Tbl;
ONLINE DEMO
它只有A,B和C吗? –
做一个“GROUP BY”。使用'case'表达式来进行条件聚合。 – jarlh