Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 DISTINCT - как???  [new]
Oleg Cherkasenko
Member

Откуда:
Сообщений: 75
Есть запрос

select distinct id,parentid,name,len,in,out from @result
order by id asc

Так вот нужно выбрать только записи с уникальным id

А вданном варианте получается, что попадаются записи, где ид повторяется.
4 апр 03, 17:15    [165362]     Ответить | Цитировать Сообщить модератору
 Re: DISTINCT - как???  [new]
vap
Member

Откуда:
Сообщений: 487
DISTINCT срабатывает для всей строки, используйте GROUP BY

select id, MAX(parentid), MAX(name), MAX(len), MAX(in), MAX(out) from @result 

GROUP BY id order by id asc
4 апр 03, 17:18    [165366]     Ответить | Цитировать Сообщить модератору
 Re: DISTINCT - как???  [new]
tygra
Member

Откуда: Тверь (Иркутск, Край)
Сообщений: 9997
2 vap

И чего это получится?
ID будет от одной записи, а MAX(parentid) - естественно может быть от другой

Хотя может Oleg Cherkasenko этого и надо?
4 апр 03, 17:31    [165382]     Ответить | Цитировать Сообщить модератору
 Re: DISTINCT - как???  [new]
vap
Member

Откуда:
Сообщений: 487
2 tygra, так и получится
в вопросе указано
=Так вот нужно выбрать только записи с уникальным id
и ничего не сказано об остальных полях.
4 апр 03, 17:38    [165391]     Ответить | Цитировать Сообщить модератору
 Re: DISTINCT - как???  [new]
Oleg Cherkasenko
Member

Откуда:
Сообщений: 75
А нет, ребята, мне нужны конкретные записи, но из повторяющихся, только одна, но - конкретная
4 апр 03, 17:40    [165394]     Ответить | Цитировать Сообщить модератору
 Re: DISTINCT - как???  [new]
u001
Guest
Контретная это какая: первая, последняя. Если значения разные у одного ID max,min?
4 апр 03, 17:46    [165407]     Ответить | Цитировать Сообщить модератору
 Re: DISTINCT - как???  [new]
Oleg Cherkasenko
Member

Откуда:
Сообщений: 75
неважно какая, нужна одна
4 апр 03, 17:52    [165421]     Ответить | Цитировать Сообщить модератору
 Re: DISTINCT - как???  [new]
MiCe
Member

Откуда: RUSSIA STAVROPOL Pyatigorsk
Сообщений: 1996
уникальный ключ есть?
инче получается оч громоздко если одним селектом.....
select distinct d.id,

parentid=(select top 1 r.parentid from @result r where r.id=d.id order by parentid,name,len,in,out),
name=(select top 1 r.name from @result r where r.id=d.id order by parentid,name,len,in,out),
len=(select top 1 r.len from @result r where r.id=d.id order by parentid,name,len,in,out),
in=(select top 1 r.in from @result r where r.id=d.id order by parentid,name,len,in,out),
out=(select top 1 r.out from @result r where r.id=d.id order by parentid,name,len,in,out)
from @result d
order by id asc
parentid,name,len,in,out

это будет получше
select uid=identity(int,1,1),id,parentid,name,len,in,out into #t

from @result
select t1.*
from (select distinct id,
u=(select top 1 uid from #t t where t.id=t1.id)
from #t t1 ) t
join #t t1
on t.uid = t1.uid
4 апр 03, 17:56    [165430]     Ответить | Цитировать Сообщить модератору
 Re: DISTINCT - как???  [new]
MiCe
Member

Откуда: RUSSIA STAVROPOL Pyatigorsk
Сообщений: 1996
вместо on t.uid = t1.uid надо on t.u = t1.uid
4 апр 03, 17:57    [165433]     Ответить | Цитировать Сообщить модератору
 Re: DISTINCT - как???  [new]
YellowMan
Member

Откуда: острова
Сообщений: 1047
Нужна уникальность - она у вас есть ?
4 апр 03, 17:59    [165439]     Ответить | Цитировать Сообщить модератору
 Re: DISTINCT - как???  [new]
tygra
Member

Откуда: Тверь (Иркутск, Край)
Сообщений: 9997
Стоп, стоп, стоп.
2 Oleg Cherkasenko
Так еще объясните: нужны записи, id которых ни разу не повторяются или из всех повторяющихся только одна?

если первое, то
select * from @result R join (select ID from @result group by ID having count(ID) = 1) as RR on (R.ID = RR.ID)
4 апр 03, 18:10    [165453]     Ответить | Цитировать Сообщить модератору
 Re: DISTINCT - как???  [new]
Oleg Cherkasenko
Member

Откуда:
Сообщений: 75
Результат: 9 записей, из них у двух иды равны, мне нужны 8, в которых все иды уникальны, т.е. во всем множестве из всех повторяющихся только одна и все с уникальными ид
4 апр 03, 18:42    [165480]     Ответить | Цитировать Сообщить модератору
 Re: DISTINCT - как???  [new]
ну и ну
Guest
этот топик из серии отгадайте то, не знаю чего
4 апр 03, 18:44    [165483]     Ответить | Цитировать Сообщить модератору
 Re: DISTINCT - как???  [new]
tygra
Member

Откуда: Тверь (Иркутск, Край)
Сообщений: 9997
declare @result table (id int, n varchar(10))

insert @result
select 1,'1'
union all select 2,'2'
union all select 3,'3'
union all select 4,'4'
union all select 5,'5'
union all select 6,'6'
union all select 7,'7'
union all select 8,'8'
union all select 9,'9'
union all select 9,'99'

select * from @result R join (select ID from @result group by ID having count(ID) = 1) as RR on (R.ID = RR.ID)


Проверь - все правильно, возвращает 8
4 апр 03, 18:46    [165485]     Ответить | Цитировать Сообщить модератору
 Re: DISTINCT - как???  [new]
Breakneck
Member

Откуда: Kiev
Сообщений: 2454
Согласен с tygra, его запрос - абсолютно верен, сам бы так написал
4 апр 03, 18:51    [165492]     Ответить | Цитировать Сообщить модератору
 Re: DISTINCT - как???  [new]
Oleg Cherkasenko
Member

Откуда:
Сообщений: 75
Не совсем, сюда не попадают совсем те записи, у которых ид=9, увы, а надо, чтобы хоть одна попала
4 апр 03, 19:21    [165514]     Ответить | Цитировать Сообщить модератору
 Re: DISTINCT - как???  [new]
Oleg Cherkasenko
Member

Откуда:
Сообщений: 75
Здесь коллега писал, что нужно то, не знаю чего.
Так вот отвечаю: знаю чего хочу :-) , а вот решения нету?...
4 апр 03, 19:54    [165537]     Ответить | Цитировать Сообщить модератору
 Re: DISTINCT - как???  [new]
Некто
Member

Откуда: Киев
Сообщений: 312
2Oleg Cherkasenko
Так вот отвечаю: знаю чего хочу :-) , а вот решения нету?...

Вы бы, милейший, привели скрипт со вставкой исходных данных и результат, который хотели бы получить (тоже в виде скрипта). А то пока народ напрягается, отгадывая чего Вы хотите. Некорректно это IMHO.
4 апр 03, 20:02    [165540]     Ответить | Цитировать Сообщить модератору
 Re: DISTINCT - как???  [new]
Oleg Cherkasenko
Member

Откуда:
Сообщений: 75
Скрипт: тот, который любезно предоставил tygra,

declare @result table (id int, n varchar(10))
insert @result
select 1,'1'
union all select 2,'2'
union all select 3,'3'
union all select 4,'4'
union all select 5,'5'
union all select 6,'6'
union all select 7,'7'
union all select 8,'8'
union all select 9,'9'
union all select 9,'99'

Но вот на выход едолжно быть всего 9 записей, у которых присутствуют ВСЕ иды и не повторяются.
4 апр 03, 20:29    [165548]     Ответить | Цитировать Сообщить модератору
 Re: DISTINCT - как???  [new]
YellowMan
Member

Откуда: острова
Сообщений: 1047
Я наверное рискну прослыть занудой, но пока Вы не введете уникальность в табличку, Вы обречены толочь воду в ступе, бо нарушаете правила нормализации.

Когда введете, простой запрос типа

select * from @results where un_id in (select max(un_id) from @results group by
id)


сделает Ваши волосы здоровыми и шелковистыми
4 апр 03, 20:34    [165552]     Ответить | Цитировать Сообщить модератору
 Re: DISTINCT - как???  [new]
Oleg Cherkasenko
Member

Откуда:
Сообщений: 75
To YellowMan:

Спасибо, все так и есть, добавил идентити.
4 апр 03, 20:43    [165556]     Ответить | Цитировать Сообщить модератору
 Re: DISTINCT - как???  [new]
Oleg Cherkasenko
Member

Откуда:
Сообщений: 75
Единственное примечание:

здесь IN делает выборку медленной

IN (select max(un_id) from @results group by id)
4 апр 03, 20:45    [165557]     Ответить | Цитировать Сообщить модератору
 Re: DISTINCT - как???  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 145719
Очередной вопрос кретина.
"Как сделать, что бы 2*2=5 ?"
Базы надо правильно проектировать!
4 апр 03, 20:47    [165559]     Ответить | Цитировать Сообщить модератору
 Re: DISTINCT - как???  [new]
Oleg Cherkasenko
Member

Откуда:
Сообщений: 75
То Cat2:
Это Ваше первое сообщение, надо понимать Вы хотите задать вопрос, т.е. Вы себя имели в виду, нетерпимый Вы наш? :-)

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

Отож...
4 апр 03, 21:17    [165565]     Ответить | Цитировать Сообщить модератору
 Re: DISTINCT - как???  [new]
Glory
Member

Откуда:
Сообщений: 104760
Если записи все-таки в чем-то разные, то нужно искать эту разницу
Например так

declare @result table (id int, n varchar(10)) 

insert @result
select 1,'1'
union all select 2,'2'
union all select 3,'3'
union all select 4,'4'
union all select 5,'5'
union all select 6,'6'
union all select 7,'7'
union all select 8,'8'
union all select 9,'9'
union all select 9,'99'

select a.* from @result a
inner join(select id, min(n) as min_n from @result group by id) as b on a.id = b.id and a.n = b.min_n

Если 2-х полей недостаточно, то придется результаты запроса группировать по двум полям, добавлять к ним аггрегатную функцию по третьему поля и связывать с оригинальной таблицей. И т.д. Если записи совпадают по всем полям, то тут уж вам ничто не поможет их различить без изменения структуры.



ЗЫ
А на слабо подбивать не надо, тем более фактическое отсутствие первичного ключа это ошибка разработчика и по-хорошему 100%-но правильный результат даст вам курсор. Cat2 вам на это и указал. Конечно грубовато, но все же
4 апр 03, 21:40    [165572]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить