2016-04-28 2 views
0

Я пытаюсь выбрать строки в таблице SQL на основе нескольких условий в пределах того же уникального идентификатора.SQL Server: выбор строк на основе нескольких условий в пределах одного и того же уникального идентификатора

У меня есть следующие таблицы:

ID               Статус
                А.С.
                Rec
                КАК

Правилами заключаются в следующем:

  • Если [ID] имеет как «Rec» и «АС» , выберите только строку с «Rec». Другими словами, «Rec» имеет приоритет над «AS».

  • Если у [ID] нет «Rec», выберите строку с «AS».

Я хочу запрос для вывода только строки ID=1,Status=AS и ID=2,Status=Rec.

Каков запрос, чтобы выбрать только эти две строки?

ответ

1

Можете ли вы создать вспомогательный столбец или поле, которое служит в качестве заказа для ваших значений?

Rec = 3 
AS = 2 
.... 

Затем смотрите описание и соответствующую статью здесь: https://stackoverflow.com/a/2129703/5819421

В статье говорит о «Выбор одного максимальной строки из каждой группы», которая звучит как то, как это будет работать для вас.

+0

Я не могу создать дополнительные столбцы. Было бы легко, если бы я мог просто добавить условие WHERE [newCol] = 'any'', но у меня нет контроля над этим. – BansheeAce

0

код псевдопользователей:

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.

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 
+0

Конечно, может потребоваться дальнейшее фильтрование производной таблицы в CTE, если есть другие значения статуса, которые вы не хотите рассматривать. – HLGEM

Смежные вопросы