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

Откуда:
Сообщений: 5
Есть таблица следующего вида.
Id Address X   Y
11  aaa    11  12
23  bbb    11  33
24  ccc    14  33
28  ddd    14  33
32  eee    55  54
41  fff    55  54

А мне надо получить записи с уникальными значениями столбцов Х и У
Вроде того
Id Address X   Y
11  aaa    11  12
23  bbb    11  33
24  ccc    14  33
32  eee    55  54


P.S: Microsoft SQL Server 2005
6 окт 09, 18:06    [7749839]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос, выбор уникальных значений.  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
А будет ли верным такой результат?
Id Address X   Y
11  aaa    11  12
23  bbb    11  33
28  ddd    14  33
41  fff    55  54
И почему?
6 окт 09, 18:08    [7749855]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос, выбор уникальных значений.  [new]
Zak-r2
Member

Откуда:
Сообщений: 5
Паганель,

Это не важно, пускай будет приоритет у записей с меньшим id
6 окт 09, 18:10    [7749866]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос, выбор уникальных значений.  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
как-то так
select top 1 with ties *
  from [Есть таблица следующего вида]
 order by row_number() over(partition by X, Y order by Id)
6 окт 09, 18:12    [7749884]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос, выбор уникальных значений.  [new]
Zak-r2
Member

Откуда:
Сообщений: 5
Спасибо
а будет ли это совместимо с SQL:2003
6 окт 09, 18:16    [7749918]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос, выбор уникальных значений.  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Zak-r2
а будет ли это совместимо с SQL:2003
такой версии сервера я не знаю
если Вы про 2000, то можно попробовать еще как-то так:
select *
  from [Есть таблица следующего вида] as t1
 where not exists (select 'не важно что'
                     from [Есть таблица следующего вида] as t2
                    where t2.X = t1.X
                      and t2.Y = t1.Y
                      and t2.Id < t1.Id)
6 окт 09, 18:19    [7749940]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос, выбор уникальных значений.  [new]
Zak-r2
Member

Откуда:
Сообщений: 5
Теперь уже огромное спасибо, работает :)
Я имел в виду ANSI SQL:2003
6 окт 09, 18:23    [7749973]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос, выбор уникальных значений.  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
я в стандартах не понимаю
мне абы работало
6 окт 09, 18:25    [7749984]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос, выбор уникальных значений.  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Zak-r2
Теперь уже огромное спасибо, работает :)
Я имел в виду ANSI SQL:2003
Конструкция TOP (N) WITH TIES - это фишка Microsoft, этого нет ни в одном стандарте.
Но данную задачу очень просто решить в рамках SQL1999
WITH CTE AS(SELECT ROW_NUMBER()OVER(PARTITION BY X,Y ORDER BY ID) AS N,* FROM T)
SELECT * FROM CTE WHERE N=1;
6 окт 09, 20:06    [7750305]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос, выбор уникальных значений.  [new]
Ozzy-Osbourne
Member

Откуда: Balashikha
Сообщений: 139
автор
Я имел в виду ANSI SQL:2003
Если в этом стандарте имеется функция substring, то вот:
declare @t table(id int, addr varchar(10), x int, y int)
insert into @t 
select 11,'aaa',11,12 union all
select 23,'bbb',11,33 union all
select 24,'ccc',14,33 union all
select 28,'ddd',14,33 union all
select 32,'eee',55,54 union all
select 41,'fff',55,54

select id=cast(substring(idm,2,9) as int),addr=substring(idm,11,10),x,y
from(
  select idm=min( cast(1000000000+id as char(10))+addr),x,y
    from @t
   group by x,y
)t
idaddrxy
11aaa1112
23bbb1133
24ccc1433
32eee5554

ЗЫ. Zak-r2: в стартовом посте Вы сказали, что СУБД = SS 2005, затем упомянули про стандарт 2003. Так ли необходимо ему следовать ?
6 окт 09, 23:53    [7750821]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить