SQL Server:根据同一唯一ID中的多个条件选择行

时间:2016-04-28 17:19:52

标签: sql sql-server reporting-services

我正在尝试根据同一唯一ID中的多个条件在SQL表中选择行。

我有下表:

号状态
1 AS
2建议
2 AS

规则如下:

  • 如果[ID]同时具有'Rec'和'AS',则只选择带'Rec'的行。换句话说,'Rec'优先于'AS'。

  • 如果[ID]没有“Rec”,请选择“AS”行。

我希望查询只输出行ID=1,Status=ASID=2,Status=Rec

选择 这两行的查询是什么?

3 个答案:

答案 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。