2013-07-02 3 views
0

Я пытаюсь выбрать отдельное значение из столбца, но возвращать все строки, связанные с выбранными значениями. В коде psuedo это будет выглядеть так.Выберите значение Distinct из столбца и верните все строки

SELECT * 
FROM table 
WHERE field is Distinct 

Я искал вопрос, и я попытался использовать GROUP BY, но запрос никогда не выполняется. Спасибо за помощь.

Я использую базу данных Microsoft SQL.

Паспорта выглядит следующим образом:

CodeId Code CatalogType CodeGroup CodeText CodeGroupText CodeDesc State_ID 
------- ----- ------------- ---------- -------- -------------- --------- --------- 
1  AAAA 1    100   Plastic Plastic Center NULL  2 
2  BBBB 1    100   Glass  Glass Center NULL  2 
3  CCCC 1    101   Steel  Steel Center NULL  2 

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

данных будет выглядеть следующим образом:

CodeId Code CatalogType CodeGroup CodeText CodeGroupText CodeDesc State_ID 
------- ----- ------------- ---------- -------- -------------- --------- --------- 
1  AAAA 1    100   Plastic Plastic Center NULL  2 
3  CCCC 1    101   Steel  Steel Center NULL  2 
+0

Edited с дополнительной информацией – Matt

+0

Edited снова с результатами – Matt

+0

и это произвольная строка, которая вы хотите вернулись из каждого или вам нужен конкретный? –

ответ

3

Вы всегда можете использовать подзапрос вернуть min(codeid) для каждого codegroup и присоединиться к этому результату к столу:

select t1.codeid, 
    t1.code, 
    t1.catalogtype, 
    t1.codegroup, 
    t1.codetext, 
    t1.codegrouptext, 
    t1.codedesc, 
    t1.state_id 
from yourtable t1 
inner join 
(
    select MIN(codeid) codeid, codegroup 
    from yourtable 
    group by codegroup 
) t2 
    on t1.codeid = t2.codeid 
    and t1.codegroup = t2.codegroup 
+0

Спасибо, что я никогда не знал о подзапросе. Это хороший бит SQL, спасибо за помощь. – Matt

3

В большинстве баз данных, вы можете сделать:

select t.* 
from (select t.* 
      row_number() over (partition by field order by field) as seqnum 
     from t 
    ) t 
where seqnum = 1 
+1

Почему вы предлагаете первый запрос для MySQL, когда знаете, что он вернет результаты (строки), которых нет в таблице? –

+0

@ypercube. , , Во-первых, я говорю это в ответ. Во-вторых, вопрос не говорит, что делать со значениями, когда имеется несколько строк. И, в-третьих, вопрос был изменен, поэтому речь идет не о MySQL. –

+0

+1 Ваша интерпретация вопроса кажется правильной после разъяснения. –

0
SELECT field1,field2,max(field3),sum(field4) 
FROM table 
GROUP BY field1, field2 

Это даст вам все различные FIELD1 и FIELD2 годов. Вы не можете получить поле field3 напрямую (с этой группировкой), так как может быть несколько полей3.

0

, если вам нужно просто различные значения из столбца, то есть найти множество уникальных значений в одном столбце, то этот код помогает (для SQL-сервера, по крайней мере):

select distinct 
    columnName 
from tableT 
Смежные вопросы