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

Откуда:
Сообщений: 59
sql 2008

есть набор данных, документов, в которых есть строки. Нужно сделать нумерацию строк внутри документов.
Пример:
with n as (
  select 1 as id_doc, '123' as n_doc, '20120101' as date_doc, 'cust1' as cust
  union all
  select 2, '222', '20120201', 'cust2'
  union all
  select 3, '333', '20120301', 'cust3'
),
     b as (
  select 1 as id_doc, 1 as product_id, 100 as qty, 1000 as price
  union all   
  select 1, 2, 200, 2000
  union all   
  select 2, 2, 10, 100
  union all   
  select 3, 4, 50, 200
  union all   
  select 3, 5, 150, 20
  union all   
  select 3, 6, 250, 10
)
select n_doc, date_doc, cust, product_id, qty, price 
from n
  inner join b on n.id_doc = b.id_doc
order by n_doc  


Необходимый результат:
n_doc	date_doc	cust	product_id	qty	price	rownum
123	20120101	cust1	1	        100	1000	1
123	20120101	cust1	2	        200	2000	2
222	20120201	cust2	2	        10	100	1
333	20120301	cust3	4	        50	200	1
333	20120301	cust3	5	        150	20	2
333	20120301	cust3	6	        250	10	3


В поиске похожего не нашел :(
Спасибо.
2 ноя 12, 15:11    [13414858]     Ответить | Цитировать Сообщить модератору
 Re: сортировка по группам  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
b00ring,

ROW_NUMBER()OVER(PARTITION BY n_doc ORDER BY product_id)
2 ноя 12, 15:13    [13414876]     Ответить | Цитировать Сообщить модератору
 Re: сортировка по группам  [new]
b00ring
Member

Откуда:
Сообщений: 59
iap, спасибо,
просто никак не пойму этот партишин когда идет сквозная нумерация, а когда по группам..
2 ноя 12, 15:23    [13414993]     Ответить | Цитировать Сообщить модератору
 Re: сортировка по группам  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
b00ring
iap, спасибо,
просто никак не пойму этот партишин когда идет сквозная нумерация, а когда по группам..
Определяет строки, в которых значения перечисленных полей имеют одно и то же значение.
Такие строки называются "окном", функция из-за этого - "оконной", а ORDER BY действует независимо в каждом "окне".
2 ноя 12, 15:45    [13415195]     Ответить | Цитировать Сообщить модератору
 Re: сортировка по группам  [new]
Добрый Э - Эх
Guest
iap
b00ring
этот партишин
Определяет строки, в которых значения перечисленных полей имеют одно и то же значение.
Такие строки называются "окном", функция из-за этого - "оконной", а ORDER BY действует независимо в каждом "окне".

Позволь с тобой не согласится. PARTITION - определяет группу строк - секцию, а не окно. Окно же в рамках отдельно взятой секции может быть задано явно, либо быть "усолчательным". Для ранжирующих функций (коим row_number и является) - окно берется по умолчанию. Оно - "плавающее" и включает в себя строки от первой в секции до текущей строки включительно (в заданном ORDER BY порядке строк). И, по сути, описание окна в этом случае просто опускается из текста запроса.
Однако, для других оконных функций, можно явно задать любое произвольное окно строк (или окно диапазонов значений) в рамках секции (читать про rows | range between ... preceding and ... following). Вот именно описание rows between (range between) - и есть окно (window).
Таким образом, получается, что окно в общем случае - это лишь некоторое подмножество строк секции.. А секция (Partition) - это более "крупная" величина.
2 ноя 12, 19:33    [13416578]     Ответить | Цитировать Сообщить модератору
 Re: сортировка по группам  [new]
Добрый Э - Эх
Guest
Добрый Э - Эх
солчательным"а.
читать как "уМолчательным" :)
2 ноя 12, 19:34    [13416583]     Ответить | Цитировать Сообщить модератору
 Re: сортировка по группам  [new]
Добрый Э - Эх
Guest
ссылка на документацию
2 ноя 12, 19:51    [13416634]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить