我正在尝试根据同一唯一ID中的多个条件在SQL表中选择行。
我有下表:
号状态
1 AS
2建议
2 AS
规则如下:
如果[ID]同时具有'Rec'和'AS',则只选择带'Rec'的行。换句话说,'Rec'优先于'AS'。
如果[ID]没有“Rec”,请选择“AS”行。
我希望查询只输出行ID=1,Status=AS
和ID=2,Status=Rec
。
选择 这两行的查询是什么?
答案 0 :(得分:1)
您可以创建一个辅助列或字段作为您的值的订单吗?
Rec = 3
AS = 2
....
然后,请参阅此处的说明和相关文章:https://stackoverflow.com/a/2129703/5819421
文章谈到“从每个组中选择一个最大行”,这听起来像这对你有用。
答案 1 :(得分:1)
; WITH CTE AS (
SELECT ROW_NUMBER() OVER (PARTITION BY id ORDER BY status DESC) rn, ID, Status
FROM (
SELECT DISTINCT id, status
FROM MyTable
)--in case you have several Rec's and AS's
)
SELECT id, status
FROM CTE
WHERE rn = 1
答案 2 :(得分:0)
Psuedo代码:
SELECT DISTINCT Id, Status
FROM MyTable
WHERE Status = 'Rec'
OR (
Status = 'AS'
AND NOT EXISTS(
SELECT * FROM MyTable WHERE Status='Rec', correlated to outer query on Id
)
)
在英语中,获取一组不同的行,其中状态为" Rec"或者状态是" AS"并且没有" Rec"对于相同的Id。