![]() |
![]() |
|
нумерация в запросе по одинаковым датам | ☑ | ||
---|---|---|---|---|
0
aleee-eeex
09.07.16
✎
21:20
|
Есть таблица вида:
Период / Подразделение / Сумма / НомерЗаписи Надо сделать нумерацию, когда Период одинаков. Если Период меняется, то нумерация начинается с начала. За одну дату Подразделение и Сумма могут быть одинаковыми, но НомерЗаписи всегда везде разный и порядок в нем не соблюдается. Например: МойНомер /Период/ Подразделение / Сумма / НомерЗаписи 1/ 01.01.2016/ Подразделение1 / 1500 / 8 2/ 01.01.2016/ Подразделение1 / 1500 / 7 3/ 01.01.2016/ Подразделение2 / 1500 / 15 1/ 01.02.2016/ Подразделение1 / 2500 / 10 1/ 01.03.2016/ Подразделение2 / 1500 / 30 2/ 01.03.2016/ Подразделение1 / 5000 / 9 1/ 01.04.2016/ Подразделение1 / 1500 / 14 Пробовал так: ВЫБРАТЬ рс.НомерЗаписи, рс.Период, ВЫБОР КОГДА КОЛИЧЕСТВО(вт.Период) ЕСТЬ NULL Тогда 0 иначе КОЛИЧЕСТВО(вт.Период) конец как МойНомер , рс.Подразделение, рс.Сумма из ВТ_расходы как рс левое соединение ВТ_расходы как вт по рс.Период >= вт.Период СГРУППИРОВАТЬ ПО рс.Период, рс.Подразделение, рс.Сумма, рс.НомерЗаписи упорядочить по рс.Период Но, результат выглядит так(номерация не правильная) МойНомер /Период/ Подразделение / Сумма / НомерЗаписи 3/ 01.01.2016/ Подразделение1 / 1500 / 8 3/ 01.01.2016/ Подразделение1 / 1500 / 7 3/ 01.01.2016/ Подразделение2 / 1500 / 15 4/ 01.02.2016/ Подразделение1 / 2500 / 10 6/ 01.03.2016/ Подразделение2 / 1500 / 30 6/ 01.03.2016/ Подразделение1 / 5000 / 9 7/ 01.04.2016/ Подразделение1 / 1500 / 14 Понятно, что связал не правильно. Помогите исправить, пожалуйста. |
|||
1
Garykom
гуру
09.07.16
✎
21:31
|
А понимаем что "нумерация в запросе" может на большой выборке данных "положить сервак"?
Не проще кодом в ТЗ или хотя бы в СКД? |
|||
2
aleee-eeex
09.07.16
✎
21:42
|
(1) Да, Вы правы. СКД имеет стандартные средства для этого и так было бы конечно проще. Но это задание от преподавателя, сказано сделать именно запросом.
Хотелось бы знать хотя бы идеи "КАК" сделать(( |
|||
3
mkalimulin
09.07.16
✎
22:14
|
(2) Соединить таблицу с самой собой.
|
|||
4
kosts
09.07.16
✎
22:21
|
Предположение. Надо соединить с искусственной таблицей в которой нумерация от 1 до N. с условием что N меньше или равно количеству записей в группе одинаковых по периоду записей.
|
|||
5
Garykom
гуру
09.07.16
✎
22:23
|
(2) до чего ленивые студенты пошли Книга знаний: Нумерация строк в запросе
|
|||
6
Garykom
гуру
09.07.16
✎
22:25
|
(4) Как раз с группами оно само почти по (5)
|
|||
7
aleee-eeex
09.07.16
✎
23:29
|
(3) это я и сделал, спасибо.) но вопрос больше по условию соединения...
|
|||
8
aleee-eeex
09.07.16
✎
23:36
|
(4) попробовал по Вашему совету...не правильно обрабатывает когда есть дубли дат:
ВЫБРАТЬ 0 КАК Поле ПОМЕСТИТЬ Числа ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ (Числа1.Поле+4*Числа2.Поле+16*Числа3.Поле)+1 КАК НомерСтроки поместить ВТ_ЧислаПоПорядку ИЗ Числа КАК Числа1, Числа КАК Числа2, Числа КАК Числа3 ; выбрать рс.Период, КОЛИЧЕСТВО(рс.Период) КАК ЧислоЗаписейНаПериод ПОМЕСТИТЬ ВТ_ЧислоЗаписейНаПериод из ВТ_расходы как рс СГРУППИРОВАТЬ ПО рс.период ; ВЫБРАТЬ рс.Период, вт.ЧислоЗаписейНаПериод, рс.Подразделение , рс.СуммаРасход ПОМЕСТИТЬ ВТ_РасхПоКоличеству из ВТ_расходы как рс левое соединение ВТ_ЧислоЗаписейНаПериод как вт по рс.Период = вт.Период ; ВЫБРАТЬ рс.Период, рс.Подразделение , рс.СуммаРасход, вт.НомерСтроки из ВТ_РасхПоКоличеству как рс левое соединение ВТ_ЧислаПоПорядку как вт по вт.НомерСтроки <= рс.ЧислоЗаписейНаПериод упорядочить по рс.Период _______________________ в итоге получается: МойНомер /Период/ Подразделение / Сумма / НомерЗаписи 1/ 01.01.2016/ Подразделение1 / 1500 / 8 2/ 01.01.2016/ Подразделение1 / 1500 / 8 3/ 01.01.2016/ Подразделение1 / 1500 / 8 1/ 01.01.2016/ Подразделение1 / 1500 / 7 2/ 01.01.2016/ Подразделение1 / 1500 / 7 3/ 01.01.2016/ Подразделение1 / 1500 / 7 1/ 01.01.2016/ Подразделение1 / 1500 / 15 2/ 01.01.2016/ Подразделение2 / 1500 / 15 3/ 01.01.2016/ Подразделение2 / 1500 / 15 1/ 01.02.2016/ Подразделение1 / 2500 / 10 1/ 01.03.2016/ Подразделение2 / 1500 / 30 2/ 01.03.2016/ Подразделение2 / 1500 / 30 1/ 01.03.2016/ Подразделение2 / 5000 / 9 2/ 01.03.2016/ Подразделение1 / 5000 / 9 1/ 01.04.2016/ Подразделение1 / 1500 / 14 ________________ |
|||
9
Garykom
гуру
09.07.16
✎
23:36
|
Блин читать то умеем?
Аналогичную технику можно применить, если нужно задавать нумерацию строк с учетом группировки по какому-то полю. ВЫБРАТЬ Номенклатура.Ссылка КАК Номенклатура, Номенклатура.Родитель КАК Родитель, КОЛИЧЕСТВО(Номенклатура_1.Ссылка) КАК Номер ИЗ Справочник.Номенклатура КАК Номенклатура ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура_1 ПО Номенклатура.Наименование >= Номенклатура_1.Наименование И Номенклатура.Родитель = Номенклатура_1.Родитель СГРУППИРОВАТЬ ПО Номенклатура.Родитель, Номенклатура.Ссылка запрос с номерами строк в рамках группировки |
|||
10
aleee-eeex
09.07.16
✎
23:58
|
(9) Большое спасибо, оказывается как раз условия равенства по родителю и не хватало)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |