繁体   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