【发布时间】:2023-03-06 09:44:02
【问题描述】:
我在 SQL 查询中添加额外的列,其中包含与其他列相同的信息,但经过更多过滤,我遇到了这种困难(对 SQL 有点菜鸟)。我举个例子解释一下:
SELECT
aMain.MaintGroupName,
CCALARMS = (SELECT COUNT(ALARMIDKEY) --subquery begins
FROM 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')
)
)
)
), --subquery ends
COUNT(rSTA.ALARMIDKEY) -- same column as previous, but with no conditions
FROM
REPORTER.reporter.REPORTER_STATUS rSTA
INNER JOIN
AIWA2.dbo.MaintGroup aMain ON aMain.MaintGroupId = rSTA.ALARMOWNERID
GROUP BY
aMain.MaintGroupName
我希望这可以让我获得组名称、具有特殊条件的警报、没有任何条件的相同警报,并按组名称对所有内容进行分组(向我显示特定警报和每个组的所有警报)。此查询向我显示了组名和正确分组的所有警报,但那些“CCALARMS”仅显示为每个组计数,而不是分组。我应该添加什么条件,以便子查询中的这个计数在查询中被分组?在附加连接中可能需要类似 rSTA.ALARMIDKEY = CCALARM.ALARMIDKEY 的东西?
这是我现在得到的,正如您所看到的,每组 CCALARMS 都被计算在内。想知道我应该如何分发它。 ALARM
希望很清楚我想要实现的目标,如果没有,请告诉我,我会提供更多详细信息。提前致谢!
【问题讨论】:
-
我们使用的是 Microsoft SQL 服务器。
标签: sql sql-server join subquery left-join