簡體   English   中英

嘗試通過SQL查詢獲取每天的項目數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM