2010-11-30 3 views
1

У меня есть одна таблица: проверка с двумя столбцами: ID, памяткаSQL-таблица с двумя столбцами SQL:

ID - это первичный ключ.

Я хотел бы запрос, который возвращает обе колонки: ID, Memo, но только где Memo является DISTINCT

я могу сделать следующее, чтобы получить различные значения из Memo:

SELECT DISTINCT(memo) 
FROM checking 

Как я вернуть эти значения Memo и их значения из столбца ID?

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

Спасибо за вашу помощь

Образец данных:

ID  Memo 
1   a 
2   c 
3   e 
4   g 
5   a 
6   c 

Нужный возвращение:

1,a 
2,c 
3,e 
4,g 

5 и 6 не будут включены, потому что они имеют одинаковые значения памятки.

Еще раз спасибо за помощь.

+0

Is ID Unique? Может ли два разных идентификатора использовать одно и то же значение Memo? Если они могут, вы не сможете получить один идентификатор для отличительной памятки. – 2010-11-30 03:40:15

+0

Не могли бы вы предоставить пример данных и ожидаемый результат, чтобы продемонстрировать вашу проблему? Используемая база данных тоже поможет. – 2010-11-30 03:40:47

ответ

2

Если я вас правильно понял вы хотите первый (?) Значение первичного ключа, соответствующее каждое уникальное значение памятки нашло? (Я предполагаю, что это потому, что вы не можете логически иметь как уникальные заметок и значение Id, потому что обязательно несколько значений ID для каждого повторяющегося значения памятки ...) Если предположение верно, это будет работать:

SELECT m.memo, 
    (SELECT TOP 1 x.id 
    FROM checking x 
    WHERE x.memo = m.memo 
    ORDER BY x.id) as ID 
FROM checking m 
GROUP BY m.memo 
+0

Отлично! Большое спасибо за Вашу помощь. Я никогда бы этого не понял. – mduschak 2010-11-30 04:12:33

-1
select id, memo 
from checking 
join 
(/*only where Memo is DISTINCT*/ 
    select distinct(memo) as memo 
    from checking 
) as m on checking.memo = m.memo 
+0

Это все равно возвращает повторяющиеся значения в столбце memo. Я согласен с вами, хотя это должно сделать трюк, но это не так. – mduschak 2010-11-30 03:55:10

4

ВЫБОР мин (ID), памятка от проверки группу, записки

+0

+1 гораздо более простой запрос, чем принятый ответ. – Tony 2010-11-30 08:35:16

0

SELECT, ID, памятка от проверки WHERE ID IN (SELECT MIN (ID) от проверки ГДЕ пАМЯТКА в (SELECT DISTINCT MEMO от проверки))

Хотя вложенный, этот запрос будет служить серверу!

0
SELECT id,memo 
FROM test 
WHERE id IN 
    (
    SELECT MIN(id) 
    FROM test 
    WHERE memo IN 
     (
     SELECT DISTINCT memo 
     FROM test 
     ) 
    GROUP BY memo 
    ) 
Смежные вопросы