[英]Trying to get the count of items per day with SQL query
我有一個數據庫,其中包含幾天的數據,我想每天獲取狀態為Status = 0,Status = 1 ... Status = 8的每個記錄的計數。 我當時正看到類似的東西。
DateAndTime State_0 State_1 State_2
2014-08-15 5 8 9
2014-08-16 2 5 6
2014-08-17 4 2 3
我正在嘗試這個:
SELECT DISTINCT DATEADD(dd,(DATEDIFF(dd,0,DateAndTime)),0) AS DateAndTime,
SUM( Case When State=0 Then 1 Else 0 End) AS State_0,
SUM( Case When State=1 Then 1 Else 0 End) AS State_1,
SUM( Case When State=2 Then 1 Else 0 End) AS State_2
FROM [DB_002].[dbo].[MyDb]
Group By DateAndTime
Order by DateAndTime
但它會繼續為我添加的每個狀態添加行。 在3個狀態下,每個日期我都會得到4行。 任何有關如何執行此操作的建議將不勝感激。
您正在對DateAndTime
字段進行分組,該字段還包含時間分量。 這使得每個記錄實際上都是唯一的,因此每個組中將只有一個記錄。
僅在日期分組:
Group By DATEADD(dd,(DATEDIFF(dd,0,DateAndTime)),0)
Order by DATEADD(dd,(DATEDIFF(dd,0,DateAndTime)),0)
您很困惑,因為您已更改了列並為其指定了與原始列相同的名稱。 當您說“ group by DateAndTime
,是指表中的列。 假設這是SQL Server,我將查詢編寫為如下形式:
SELECT cast(d.DateAndTime as Date) as DateAndNoTime,
SUM(Case When d.State = 0 Then 1 Else 0 End) AS State_0,
SUM(Case When d.State = 1 Then 1 Else 0 End) AS State_1,
SUM(Case When d.State = 2 Then 1 Else 0 End) AS State_2
FROM [DB_002].[dbo].[MyDb] d
Group By cast(d.DateAndTime as Date)
Order by DateAndNoTime;
這將更改select
別名的名稱,以避免混淆。 它使用別名作為列引用,以闡明查詢的含義。 並且,它使用cast()
代替了舊的datedd
/ datediff
技巧。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.