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

Откуда: Москва
Сообщений: 2646
Прошу помочь с нумерацией строк с запросе. ms sql 2000.
Всё должно быть решено с помощью одного запроса, использовать системные таблицы нельзя.

Вот исходные данные и мое решение. Как добавить нумерацию по каждому фио 1,2,3 (добавить в мое решение ещё один столбец с нумерацией по каждому фио)?
Если можно, не использовать в запросе order by.
DECLARE @T table 
(	fio varchar(100)
	,a varchar(100)
    ,p smalldatetime
)

INSERT INTO @T(fio, a, p)
VALUES
('Иванов', 'работал', '2016-01-01 00:00:00.000'),
('Иванов', 'работал', '2016-02-01 00:00:00.000'),
('Иванов', 'уволен', '2016-03-01 00:00:00.000'),
('Иванов', 'работал', '2016-04-01 00:00:00.000'),
('Иванов', 'работал', '2016-02-01 00:00:00.000'),
('Иванов', 'работал', '2016-04-01 00:00:00.000'),
('Иванов', 'уволен', '2016-05-01 00:00:00.000'),
('Иванов', 'работал', '2016-06-01 00:00:00.000'),

('Петров', 'работал', '2016-01-01 00:00:00.000'),
('Петров', 'работал', '2016-02-01 00:00:00.000'),
('Петров', 'уволен', '2016-03-01 00:00:00.000'),
('Петров', 'работал', '2016-04-01 00:00:00.000'),
('Петров', 'уволен', '2016-05-01 00:00:00.000'),
('Петров', 'работал', '2016-06-01 00:00:00.000')


SELECT fio, MIN(date1) as date1, date2
FROM
(
SELECT t1.fio, t2.p as date1, MIN(t1.p) as date2  
FROM (SELECT fio, p FROM @t t1 WHERE a = 'уволен') t1 
INNER JOIN @T t2
	ON t1.fio = t2.fio and t1.p > t2.p and t2.a = 'работал'	
GROUP BY t1.fio, t2.p
) ttt	
GROUP BY ttt.fio, ttt.date2
UNION ALL
SELECT t3.fio, t3.p, NULL
FROM @T t3
INNER JOIN (SELECT fio, MAX(p) as p FROM @t t1 WHERE a = 'уволен' GROUP BY fio) t4 
	ON t3.fio = t4.fio and t3.p > t4.p
ORDER BY fio, date1	

Решение нужно для ms sql 2000 (не обращайте внимание что уменя временная таблица в примере, это тест).
Пока не разобрался с примерами ссылка

Может подскажите готовое решение. Всё в одном запросе.
10 июн 16, 17:26    [19281858]     Ответить | Цитировать Сообщить модератору
 Re: пронумеровать строки ms sql 2000  [new]
o-o
Guest
а что там непонятного в примерах?
или вставлять все что есть в таблицу с identity,
-- само пронумеруется
или считать, сколько строк в таблице со значеним меньше данного (нужно иметь уникальное поле).

раз групп несколько и каждая со своей нумерацией,
то вариант с identity надо изменить,
например, каждую группу вставлять отдельно в таблицу с identity;
получив нумерацию, из таблицы с номерами с перелить в итоговую,
дропнуть, повторить для очередной группы.
10 июн 16, 17:59    [19282066]     Ответить | Цитировать Сообщить модератору
 Re: пронумеровать строки ms sql 2000  [new]
iiyama
Member

Откуда:
Сообщений: 642
trew,

FAQ
10 июн 16, 18:05    [19282095]     Ответить | Цитировать Сообщить модератору
 Re: пронумеровать строки ms sql 2000  [new]
aleks2
Guest
o-o
а что там непонятного в примерах?
или вставлять все что есть в таблицу с identity,
-- само пронумеруется
или считать, сколько строк в таблице со значеним меньше данного (нужно иметь уникальное поле).

раз групп несколько и каждая со своей нумерацией,
то вариант с identity надо изменить,
например, каждую группу вставлять отдельно в таблицу с identity;
получив нумерацию, из таблицы с номерами с перелить в итоговую,
дропнуть, повторить для очередной группы.


Ты чо? Переел или недоспал?

order by справится.
11 июн 16, 15:01    [19283828]     Ответить | Цитировать Сообщить модератору
 Re: пронумеровать строки ms sql 2000  [new]
o-o
Guest
aleks2
Ты чо? Переел или недоспал?

order by справится.

специально для тех, кто не дочитал (или переел, или недоспал -- нужное подчеркнуть)
trew
Если можно, не использовать в запросе order by.

хочет 7 шапочек, можно и 7
Картинка с другого сайта.

Картинка с другого сайта.
11 июн 16, 21:35    [19284807]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить