SQL Select DISTINCT ID, где Description содержит определенное текстовое значение - PullRequest
2 голосов
/ 13 февраля 2012

У меня есть таблица, которая содержит следующие примеры данных: -

ID     Description
1      John Doe
2      Jane Doe
3      RETRO John Doe
3      John Doe
4      Jane Doe
4      RETRO Jane Doe
5      Bobby

Столбец идентификатора не является первичным ключом, поэтому дубликаты идентификаторов

Я хочу выбрать все записи изТаблица выше, но там, где дублируется идентификатор, я хочу выбрать только запись, которая начинается с 'RETRO', и игнорировать другую запись.

Ответы [ 4 ]

4 голосов
/ 13 февраля 2012

Попробуйте это:

SELECT ID, DESCRIPTION FROM Table 
WHERE Description LIKE 'RETRO %' 
OR ID IN (
   SELECT ID FROM Table GROUP BY ID HAVING COUNT(*) = 1
) 
1 голос
/ 13 февраля 2012

Вы можете сделать это так:

select * from tablename where Description like 'RETRO%' and ID in (select ID from tablename group by ID having count(ID) > 1)
UNION ALL
select * from tablename where ID not in (select ID from tablename group by ID having count(ID) > 1)
order by ID, Description
0 голосов
/ 13 февраля 2012

Этот ответ, вероятно, самый простой:

SELECT ID, Description
FROM (SELECT ID, Description
    FROM TABLE
    ORDER BY Description LIKE 'RETRO%' DESC, Description ASC) a
GROUP BY ID

Это позволит отсортировать данные таким образом, чтобы строки, где Description начинается с RETRO, были максимальными, поэтому это значение используется при группировании по ID.

0 голосов
/ 13 февраля 2012

Опция без UNION:

select 
    id, 
    case 
        when (count(*) =1) then max(sd.name) 
        else (select sd2.name from sampleData sd2 where sd2.id=sd.id and name like 'Retro%')
    end

from sampledata SD
group by id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...