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

Откуда:
Сообщений: 3
Есть старый id

declare @a table( n1 int , n2 int , idold int, idnew int)

insert into @a select 1 ,1 ,1, null
union all select 1 ,1 ,2, null
union all select 2 ,1 ,3, null
union all select 2 ,1 ,4, null
union all select 2 ,1 ,5, null
union all select 3 ,1 ,6, null;

select * from @a

Хочу для одинаковых групп n1,n2 дать новый idnew

Должно получиться так:

n1 n2 idold idnew
1 1 1 1
1 1 2 1
2 1 3 2
2 1 4 2
2 1 5 2
3 1 6 3

Спасибо.
21 дек 12, 11:13    [13664571]     Ответить | Цитировать Сообщить модератору
 Re: Задать для группы чисел одинаковый id  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
pistol1918
Хочу для одинаковых групп n1,n2 дать новый idnew
См. Ранжирующие функции, DENSE_RANK
21 дек 12, 11:17    [13664601]     Ответить | Цитировать Сообщить модератору
 Re: Задать для группы чисел одинаковый id  [new]
pistol1918
Member

Откуда:
Сообщений: 3
Cделал так:

select * , DENSE_RANK() OVER (PARTITION BY n1,n2 ORDER BY n1) AS DENSE_RANK
from @a

Получил dense_rank всегда 1.
Почему он не группирует по n1, n2?
21 дек 12, 11:27    [13664661]     Ответить | Цитировать Сообщить модератору
 Re: Задать для группы чисел одинаковый id  [new]
Добрый Э - Эх
Guest
pistol1918,

partition - лишний
21 дек 12, 11:35    [13664711]     Ответить | Цитировать Сообщить модератору
 Re: Задать для группы чисел одинаковый id  [new]
Добрый Э - Эх
Guest
pistol1918
Cделал так:
+ < а ты сделай так:
--
-- Тестовый набор данных:
with 
  t(n1, n2, idold) as 
    (
      select 1 ,1 ,1
       union all
      select 1 ,1 ,2
       union all
      select 2 ,1 ,3
       union all
      select 2 ,1 ,4
       union all
      select 2 ,1 ,5
       union all
      select 3 ,1 ,6)
--
-- Основной запрос:
select t.* , dense_rank() over(order by n1,n2) as idnew
 from t
on-line проверка на sqlfiddle.com
21 дек 12, 11:41    [13664737]     Ответить | Цитировать Сообщить модератору
 Re: Задать для группы чисел одинаковый id  [new]
pistol1918
Member

Откуда:
Сообщений: 3
Спасибо всем!!!!!!!!

Сделал так и все хорошо работает.

select * , DENSE_RANK() OVER (ORDER BY n1,n2) AS DENSE_RANK
from @a

Как понял что группировка должна задаваться в выражении order by ?
21 дек 12, 11:46    [13664774]     Ответить | Цитировать Сообщить модератору
 Re: Задать для группы чисел одинаковый id  [new]
Добрый Э - Эх
Guest
pistol1918,
понятие "группировка" - неприменимо к оконным функциям. можно задать секцию, можно указать сортировку.
21 дек 12, 11:51    [13664805]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить