我正在尝试计算每天发生的FAILURE
个事件的数量,并且事件存储在MainEventTable
中,其中包含EventDateTime
,EventId
和{{列1}}。我使用的是SQL Server Management Studio 2016,它没有识别EventStatus
功能。这是我到目前为止编写的代码:
DATEFROMPARTS
更新:(感谢@wrslphil和@ PM_77-1以获得有关我的GROUP BY问题的帮助)我已修复上述GROUP BY问题并发现这有效,尽管它是非常笨重。 @KeithL简化了以下......
答案 0 :(得分:2)
此处不是很多,但如果您的项目不在分组列表中或在您的select子句中汇总,则查询肯定不会运行
我认为你可能需要对你的计数字段进行总结...就像这样
SELECT
t.EventDate,
SUM(t.EventCount) as EventCount
FROM (
SELECT
CAST(
(
CAST(
DATEPART(yyyy,s.EventDateTime)
AS VARCHAR(4)
) +
CAST(
DATEPART(mm,s.EventDateTime)
AS VARCHAR(2)
) +
CAST(
DATEPART(dd,s.EventDateTime)
AS VARCHAR(2)
)
) AS DATE
) AS EventDate,
Count(s.EventId) As EventCount
FROM (
SELECT
EventDateTime,
EventId
FROM
MainEventTable WITH(NOLOCK)
WHERE EventDateTime > '2016-12-07 00:00:00'
AND EventStatus = 'FAILURE'
) AS s
) AS t
GROUP BY t.EventDate;
查询仍然无法运行,因为您的内部查询中存在相同的问题。我可能只是在内部查询中对日期进行转换,并使用包含计数和分组的查询对其进行封装
答案 1 :(得分:1)
您的子查询具有以下结构:
SELECT field1, COUNT(field2)
FROM theTable
在同一个选择中,您使用“原始”字段和聚合(COUNT
)。你没有GROUP BY
条款。
您的SQL引擎令人困惑,因为无法确定应该选择field1
的值。
如果您打算计算field2
field1
的每个值非空值的记录数,那么代码将为:
SELECT field1, COUNT(field2)
FROM theTable
GROUP BY field1
答案 2 :(得分:1)
select CAST(EventDateTime AS DATE),COUNT(*)
FROM MainEventTable
WHERE EventDateTime > '2016-12-07 00:00:00'
AND EventStatus = 'FAILURE'
GROUP BY CAST(EventDateTime AS DATE)