【发布时间】:2017-11-08 13:16:14
【问题描述】:
需要显示一些列,例如年、周、严重性、警报和与以前相同的警报,只是过滤更多。如何添加最后一列,和上一列一样,只是过滤更多?
例子:
SELECT
CAST(DATEPART( yy, rSTA.FIRSTOCCURRENCEDAY ) AS VARCHAR) AS YEAR,
CAST(DATEPART( wk, rSTA.FIRSTOCCURRENCEDAY ) AS VARCHAR) AS MONTH,
rSEV.NAME AS SEVERITY,
COUNT(rSTA.ALARMIDKEY) AS ALARMS
FROM
REPORTER.reporter.REPORTER_STATUS rSTA
INNER JOIN
REPORTER.reporter.REP_SEVERITY_TYPES rSEV
ON
rSTA.ORIGINALSEVERITY = rSEV.SEVERITY
WHERE
rSTA.FIRSTOCCURRENCEDAY > DATEADD(week, -10, GETDATE())
AND
rSEV.NAME != 'Clear'
GROUP BY
DATEPART( yy, rSTA.FIRSTOCCURRENCEDAY ),
DATEPART( wk, rSTA.FIRSTOCCURRENCEDAY ),
rSEV.NAME
ORDER BY
DATEPART( yy, rSTA.FIRSTOCCURRENCEDAY ) DESC,
DATEPART( wk, rSTA.FIRSTOCCURRENCEDAY ) DESC
此查询正确生成前 4 列,附上图片:ALARMS
第五列应该和ALARMS一样,但是有条件:
SELECT ALARMIDKEY AS ALARMS_CC FROM REPORTER.reporter.REPORTER_STATUS WHERE
(MAINTMODECRONTAB != 'Y'
AND SUPPRESSESCL < 4
AND SPMAUTO != 1
AND ORIGINALSEVERITY > 0)
AND ((AIWAVER = 3 AND EVENTACTOR = 1)
OR
((AIWAVER < 3 OR AIWAVER IS NULL)
AND ((CONTROLCENTREVIEW = 1
AND ORIGINALSEVERITY = 5)
OR (CONTROLCENTREVIEW = 2)
OR (ALERTGROUP = 'CHECKLIST')
)
)
)
现在我想知道如何将此条件添加到主(第一个)查询中并将其分组,以便生成正确的数据。对于每年,每周和严重性显示警报和警报CC(同一列,只是不同的条件)。 我希望它看起来像这样:ALARMS_CC
希望它能清楚地说明我想要实现的目标。如果实现这一目标的方法更加优化,那就太好了。也许JOIN是可能的?
【问题讨论】:
-
您确定需要两个不同数据库的答案吗?
-
这是同一个数据库,年、周和警报位于同一个表中。严重性取自另一个表。
-
您已经标记了 Microsoft SQL Server 和 MySQL 的问题。这是两个不同的关系数据库管理系统。两者都需要一个答案吗?
-
对不起,不知何故搞砸了标签。现在修好了。正在使用 MSSQL 服务器。
标签: sql sql-server join subquery