如果对这个问题有一个积极的答案那就太好了......
是否可以根据可能的条件值的顺序进行SQL选择。
例如
Rows
ID Type
2 Dog
2 Cat
4 Cat
5 Cat
正如您所看到的,前两行的ID是相同的。所以我想按照偏好顺序选择每组1行,因此首先选择“Dog”。如果“狗”不存在,则选择“猫”
E.G。
SELECT ID, Type
FROM pets
WHERE Type = "Dog, Cat"
GROUP BY ID
结果将是......
ID Type
2 Dog
4 Cat
5 Cat
答案 0 :(得分:1)
我不确定你的“真实”要求是什么,但对于你的例子,你可以使用:
SELECT ID, Max(Type)
FROM pets
WHERE Type IN ('Dog', 'Cat')
GROUP BY ID
注意:
答案 1 :(得分:1)
如果您有另一张表按优先顺序排列您的选项,那么只需执行以下操作:
SELECT pets.ID, pets.Type
FROM pets,petprefs
WHERE pets.Type=petprefs.Type
GROUP BY pets.ID
ORDER BY petprefs.rank
具有较低等级值的类型将始终在具有较高等级的类型之前被选择。
答案 2 :(得分:1)
我完全同意Rax Olgud的回答。也可以添加提示以使用带分区语法的ROW_NUMBER函数 - 您可以编写更复杂的条件(然后是MAX(Type)。然后在WHERE部分中只通过rownum_alias = 1过滤记录
更新
select * from (
select ID, Type, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Type DESC) rn
FROM #temp
) a where rn = 1
与GROUP BY解决方案相反,这允许在select语句中放置任何列(不仅仅是分组)
答案 3 :(得分:0)
如果分组(如上面的答案中所示)不是选项,请查看SQL Server 2005中引入的排名函数。