【发布时间】:2013-08-16 14:56:35
【问题描述】:
所以基本上我目前遇到的问题是我无法弄清楚如何在 SQL Server 中执行高级 JOIN 查询。
我有以下表格:
- 事件
- 后果
- incident_consequence(加入)
- 严重性
我的查询需要从数据库中提取每个事件记录并确定其严重性,这通过与事件相关联的后果来完成(在连接表 event_consequence 中)。每个后果记录都有一个与之关联的严重性外键。一旦我得到了与事件相关的所有后果,我只需要返回具有最高严重级别整数值的那个。
因此,正如您在这里所看到的,我需要将所有关系的 event_consequences.incident_id 加入到 events.id 表中,然后从那里将 event_consequence.consequence_id 加入到后果.id 中,然后将严重性加入到后果.严重性中,等等等等。
我在做这件事时遇到了很多麻烦,我希望一个非常了解 SQL 的聪明人能够帮助我解决这个查询。
这是我目前所拥有的:
SELECT DISTINCT dbo.incidents.id, MAX(severities1.[level]) AS severities
FROM dbo.incidents
INNER JOIN dbo.incident_consequence
ON dbo.incidents.id = dbo.incident_consequence.incident_id
INNER JOIN dbo.consequences
ON dbo.incident_consequence.consequence_id = dbo.consequences.id
INNER JOIN dbo.severities AS severities1
ON dbo.consequences.severity = severities1.id
LEFT OUTER JOIN dbo.severities AS severities2
ON severities1.id = severities2.id AND severities1.[level] < severities2.[level]
WHERE (severities2.id IS NULL)
GROUP BY dbo.incidents.id, severities1.[level]
这会返回:
我需要的是:
非常感谢我能得到的任何帮助!
干杯, 本
【问题讨论】:
-
如果几个后果都与最高严重性有关怎么办?
-
那不管是什么后果,我们只需要返回一个结果就说明这是事件的严重性。在 5、5、5 的情况下,我们只需要分配一个 5。
标签: sql sql-server join greatest-n-per-group