【发布时间】:2013-06-14 22:52:21
【问题描述】:
给定一个名为 Answers like 的(简化的)表格
Id Person Answer Priority
1 Tom France Low
2 Tom Germany High
3 Fred England Low
4 Amy Italy High
我想编写一个 SQL 查询,每人返回一行,表示他们的最高优先级答案。我的想法是使用自加入
SELECT *
FROM Answers aLow
LEFT OUTER JOIN Answers aHigh
ON aLow.Person = aHigh.Person
AND aLow.Priority = 'Low'
AND aHigh.Priority = 'High'
然后在代码中检查哪些优先级列是非空的,但会为 Tom 返回一个额外的行
Id Person Answer Priority Id Person Answer Priority
1 Tom France Low 2 Tom Germany High
2 Tom Germany High NULL NULL NULL NULL
3 Fred England Low NULL NULL NULL NULL
4 Amy Italy High NULL NULL NULL NULL
使用这种方法,所需的输出将是
Id Person Answer Priority Id Person Answer Priority
1 Tom France Low 2 Tom Germany High
3 Fred England Low NULL NULL NULL NULL
4 Amy Italy High NULL NULL NULL NULL
我确定我一定遗漏了一些简单的东西,但我不能指望它。
我错过了什么?有没有更好的方法来解决这个问题?
【问题讨论】:
-
使用 DISTINCT 语句?
标签: sql sql-server