Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Выбор нескольких полей при этом DISTINCT только по одному из них  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
Доброе время суток!
Нужно выбрать несколько полей из одной таблицы, при этом DISTINCT должет быть только по одному из них.
Как такое реализовать одним запросом?

Спасибо
9 янв 12, 16:11    [11874496]     Ответить | Цитировать Сообщить модератору
 Re: Выбор нескольких полей при этом DISTINCT только по одному из них  [new]
vanezy
Member

Откуда: Ekaterinburg->Moscow->Frankfurt
Сообщений: 122
как вы предполагаете агрегировать значения в тех полях, на которые не должен распространяться DISTINCT? Если вас устроит любое из значений можно вместо DISTINCT использовать GROUP BY по этому самому полю я вывести например через MAX значения остальных полей
9 янв 12, 16:15    [11874511]     Ответить | Цитировать Сообщить модератору
 Re: Выбор нескольких полей при этом DISTINCT только по одному из них  [new]
aleks2
Guest
select [DISTINCT должет быть только по одному], max([несколько полей из одной таблицы])
from [из одной таблицы]
GROUP BY [DISTINCT должет быть только по одному]


select *
FROM (
select *, ROW_NUMBER() OVER(PARTITION BY [DISTINCT должет быть только по одному]) as N
from [из одной таблицы]
) X
WHERE N=1
9 янв 12, 16:17    [11874518]     Ответить | Цитировать Сообщить модератору
 Re: Выбор нескольких полей при этом DISTINCT только по одному из них  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
Mikhail Tchervonenko,

как вариант
declare @tmp table(name sysname)
insert into @tmp(name) values ('Vasya'),('Petya'),('Ira'),('Petya')

;with ste as (
select row_number() over (partition by name order by name) as rnum,name  from @tmp
),
dist as(
select name from ste where rnum = 1
)
select * from dist
9 янв 12, 16:23    [11874540]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить