Выберите ОТЛИЧИТЬ несколько столбцов - PullRequest
2 голосов
/ 09 февраля 2012

У меня проблемы с получением записей DISTINCT. Сценарий выглядит следующим образом: Прямо сейчас мой запрос

Select a,b,c from TABLE_NAME
(COMPLEX_INNER JOIN LOGIC)

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

GROUP BY 

п. Таким образом, запрос станет

Select a,b,c from TABLE_NAME
(COMPLEX_INNER JOIN LOGIC)
GROUP BY a,b

Но так как c не отображается в статистической функции или группе SQL-сервером, возникает следующая ошибка:

Столбец 'c' недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

Вы можете поместить свой запрос в CTE и использовать функцию row_number () , чтобы выяснить, какие строки следует извлечь.
Примерно так:

with C as
(
  Select a,b,c,
         row_number() over(partition by a, b order by SomeColumn) as rn
  from TABLE_NAME
  --(COMPLEX_INNER JOIN LOGIC)
)
select a, b, c
from C
where rn = 1

Рабочий пример:

declare @T table
(
  a int,
  b int,
  c int
)

insert into @T values
(1, 1, 1),
(1, 1, 2),
(2, 2, 1),
(2, 2, 2)

;with C as
(
  select a, b, c,
         row_number() over(partition by a, b order by c) as rn
  from @T         
)
select a, b, c
from C
where rn = 1

Результат:

a           b           c
----------- ----------- -----------
1           1           1
2           2           1
0 голосов
/ 09 февраля 2012

используйте вот так

select c,q.a,q.b from TABLE_NAME inner join 
(
Select a,b from TABLE_NAME
(COMPLEX_INNER JOIN LOGIC)
GROUP BY a,b) q 
on q.a=TABLE_NAME.a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...