SQL求某天多个值之和

3
这是我的表格。
TIME                     Status
2012-11-15 8:30:00.000   "WAS_FLOW"
2012-11-15 9:00:00.000   "WAS_FLOW"
2012-11-15 10:30:00.000  "H2_FLOW"
2012-11-11 12:14:00.00   "O23HZ_FLOW"
2012-11-11 8:00.00.000   "AZ_FLOW"
2012-11-12 9:00.000      "BZ_FLOW"

我希望我的结果显示:

TIME         "WAS FLOW"    
2012-11-11   0
2012-11-12   0
2012-11-15   2
3个回答

1

这里的其他答案都有一些小问题。我希望这个答案可以直接使用

SELECT
  DATEADD(DAY, DATEDIFF(DAY, 0, [time]), 0)             AS [date],
  SUM(CASE WHEN status = 'WAS_FLOW' THEN 1 ELSE 0 END)  AS [count]
FROM
  yourTable
GROUP BY
  DATEADD(DAY, DATEDIFF(DAY, 0, [time]), 0)

我遇到了这个错误:“将nvarchar数据类型转换为datetime数据类型时,导致超出范围的值”。 - user1836442
1
为什么把时间存储为字符串?我强烈建议将其存储为DATETIME数据类型。如果无法这样做,可以使用 LEFT(time, 10) 替代 DATEADD 计算。 - MatBailie

1
SELECT CAST(TIME AS date) AS TIME,
       COUNT(CASE WHEN Status = 'WAS_FLOW' THEN Status END) AS 'WAS_FLOW'
FROM dbo.your_table
GROUP BY CAST(TIME AS date)

演示SQLFiddle


0

请尝试以下:

   SELECT DISTINCT  CONVERT(VARCHAR(10), a.TIME, 101),
          CASE b.COUNT WHEN NULL THEN 0 ELSE b.COUNT END AS "WAS FLOW"
   FROM MyTable AS a 
       LEFT JOIN 
            (SELECT Count(STATUS) AS "COUNT"
             FROM MyTable
             WHERE Status = 'WAS_FLOW'
             GROUP BY Time
            ) AS b
   ON a.TIME= b.TIME;

这不会包括结果为0的输出行,而是这些行将不会出现。 - MatBailie
我该如何获取每天的总状态? - user1836442
@user1836442:已更新答案。请检查并告诉我,如果没有帮助的话。 - Yogendra Singh
我认为你需要说SELECT time, Count(STATUS) AS "COUNT"。 - Beth
2012年11月11日9:00.000 空 2012年11月12日8:00.00.000 空 2012年11月15日10:30:00.000 空 2012年11月15日12:14:00.00 空 2012年11月15日8:30:00.000 1 2012年11月15日9:00:00.000 1 - user1836442

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接