我在MS SQLSERVER
TimeStamp ID
2015-05-20 1
2015-05-20 2
2015-05-20 1
2015-05-21 1
2015-05-21 2
2015-05-21 2
2015-05-21 1
我的要求是根据日期计算每个Id的记录数。
要求:
Date No of records for Id=1 No. records for ID=2 Total
2015-05-20 2 1 3
2015-05-21 2 2 4
请告诉我如何为其他专栏执行此操作。
由于
答案 0 :(得分:2)
使用Pivot - 可以如下所示:
SELECT [TimeStamp], [1] AS [No of records for Id=1], [2] AS [No of records for Id=2], [1]+[2] AS Total
FROM dbo.YourTable
PIVOT
(
COUNT(ID) FOR ID IN ([1],[2])
) pvt
ORDER BY [TimeStamp]
答案 1 :(得分:0)
我使用子查询得到了答案:
SQLFIDDLE:http://sqlfiddle.com/#!3/8c28c/5
SELECT DISTINCT t1.myts,
(SELECT COUNT(*)
FROM mytable t2
WHERE t2.myts = t1.myts
AND t2.id = 1) AS id_1_count,
(SELECT COUNT(*)
FROM mytable t2
WHERE t2.myts = t1.myts
AND t2.id = 2) AS id_2_count,
(SELECT COUNT(*)
FROM mytable t2
WHERE t2.myts = t1.myts) AS total
FROM mytable t1
如果你在这里添加一个id,你需要另一个子查询
答案 2 :(得分:0)
完成动态方式:
DECLARE @id_values NVARCHAR(MAX)
DECLARE @stmt NVARCHAR(MAX)
SET @id_values = ''
SET @stmt = ''
--Get List of ID's
SELECT @id_values = @id_values + ',[' + CAST(ID AS VARCHAR) + ']'
FROM dbo.YourTable
GROUP BY ID
SET @id_values = RIGHT(@id_values, LEN(@id_values)-1) --Remove Leading Comma
--Build PIVOT Statement
SET @stmt = 'SELECT [TimeStamp],' + @id_values + ','+ REPLACE(@id_values,',','+') + ' AS Total
FROM dbo.YourTable
PIVOT
(
COUNT(ID) FOR ID IN (' + @id_values + ')
) pvt
ORDER BY [TimeStamp]'
--Execute
EXEC sp_executesql @stmt