|
Есть ли у кого-нибудь идеи, как реализовать такое запросом? | ☑ | ||
---|---|---|---|---|
0
1C-band
20.08.12
✎
15:16
|
Есть таблица, среди прочего, содержащая чётное количество элементов, имеющих определённый признак (в скобках).
Элементы Значения Элемент1(0) 0 Элемент2(1) 50 Элемент3(0) 150 Элемент4(0) 50 Элемент5(1) 100 Элемент6(0) 100 Необходимо найти сумму всех значений, в данном случае, с элемента2 по элемент5 включительно минус значение элемента2. Если встретится ещё пара элементов с признаком (1) - сумму их значений за вычетом значения первого элемента с признаком. ...Если ли мысли, как это реализовать запросом? |
|||
1
pessok
20.08.12
✎
15:17
|
разбить на втшки, посчитать в них итоги?
|
|||
2
1C-band
20.08.12
✎
15:18
|
(1) Хе хе, что именно предлагаешь пихать в ВТ-шки?
|
|||
3
pessok
20.08.12
✎
15:20
|
ну ты получил данные запросом, потом результаты по условиям запихал в втшки, потом посчитал по ним итоги
|
|||
4
z80a
20.08.12
✎
15:22
|
(0) А смысл делать это запросом?
|
|||
5
Starhan
20.08.12
✎
15:22
|
(0) пара вопросов из юбопытсва
1. Зачем элемент2 прибалвять и вычитать операция равна 0. 2. Откуда ты знаешь что надо суммировать элементы с 2 по 5. Откуда получаешь аткой порядок? |
|||
6
andrewks
20.08.12
✎
15:23
|
нифига не понял. можно пример снабдить требуемым результатом?
|
|||
7
Axel2009
20.08.12
✎
15:23
|
(0) а почему не
Элементы Значения Элемент1(0) 0 Элемент5(1) 100 Элемент4(0) 50 Элемент2(1) 50 Элемент3(0) 150 Элемент6(0) 100 ? |
|||
8
1C-band
20.08.12
✎
15:23
|
(5) Единичками в скобках я обозначил нужные мне элементы для простоты этого примера. У меня своё условие.
|
|||
9
Starhan
20.08.12
✎
15:25
|
(8) Интересно само упорядочивание по какому признаку?
|
|||
10
Axel2009
20.08.12
✎
15:25
|
(8) а усложнять будешь по мере предоставления ответов, потому как чуть более сложное не получить запросом, который поможет для текущей задачи?
|
|||
11
1C-band
20.08.12
✎
15:26
|
(7) Потому, что это - очерёдность пунктов путевого листа, и их порядок не меняется. Единичками обозначены пункты пограничных терминалов. Хотя, в теории, порядок может быть произвольным. Главное, чт пограничных пунктов - чётное количество, один "открывает", второй "закрывает". Всё, что между ними - суммируется (кроме пункта входа).
|
|||
12
Explorer1c
20.08.12
✎
15:26
|
(0)Я пришел к тебе на помощь!
|
|||
13
Axel2009
20.08.12
✎
15:27
|
ВЫБРАТЬ СУММА(Значение)
ИЗ Таблица ГДЕ Элементы > (ВЫБРАТЬ ПЕРВЫЕ 1 Элемент Из Таблица ГДЕ Признак = 1 УПОРЯДОЧИТЬ ПО Элемент) И Элементы <= (ВЫБРАТЬ ПЕРВЫЕ 1 Элемент Из Таблица ГДЕ Признак = 1 УПОРЯДОЧИТЬ ПО Элемент УБЫВ) |
|||
14
1C-band
20.08.12
✎
15:28
|
(13) Кстати, в таблице есть НомерСтроки. Буду работать через него!
|
|||
15
Starhan
20.08.12
✎
15:28
|
(13) в (0) такая приписочка
"Если встретится ещё пара элементов с признаком (1) - сумму их значений за вычетом значения первого элемента с признаком. " |
|||
16
1C-band
20.08.12
✎
15:30
|
(15) Да, автомобиль может несколько раз пересекать границу туда и обратно.
|
|||
17
Axel2009
20.08.12
✎
15:32
|
(15) иии?
|
|||
18
Starhan
20.08.12
✎
15:33
|
(17) и не сработает если будет 4 6 8 и т.д. строчек с признаком 1
|
|||
19
Axel2009
20.08.12
✎
15:34
|
(18) уверен?
|
|||
20
1C-band
20.08.12
✎
15:34
|
Через номера строк.
|
|||
21
Rovan
гуру
20.08.12
✎
15:35
|
(0) я недавно с похожей задачей бился
- оказалось тупо ТЗ быстрее работает чем запрос ! |
|||
22
grigo
20.08.12
✎
15:35
|
Легко
Элементы Значения Элемент1(0) 0 Элемент2(1) 50 Элемент3(0) 150 Элемент4(0) 50 Элемент5(1) 100 Элемент6(0) 100 Элементы Значения нумеруем Ищем чет нечет Запоминаем первое значение Ищем число пар вложенным запросом Элемент1(0) 0 Элемент2(1) 50 1 - 50 Элемент3(0) 150 Элемент4(0) 50 Элемент5(1) 100 2 + 2/2 = 1 Элемент6(0) 100 Дальше суммируем все числа с признаком и вычитаем Элемент2 * количество пар. Все делается запросом. |
|||
23
SUA
20.08.12
✎
15:35
|
1) нарастающей суммой сделать суммирование признака, закинуть в ВТ (только правильно в нарастающий итог вкладывать не "сумму вулючая", а "сумму до")
2) по ВТ просуммировать строки с нечетным значением нарастающего итога |
|||
24
Axel2009
20.08.12
✎
15:36
|
(21) нарастающий итог всегда медленней чем через ТЗ просуммировать.
|
|||
25
grigo
20.08.12
✎
15:37
|
(22) что-то у меня все в цитаты попало
Вообще (23) дело говорит. (24) а если это СКД? |
|||
26
Starhan
20.08.12
✎
15:38
|
(19) да, а ты уверен что сработает? О_о
|
|||
27
Starhan
20.08.12
✎
15:39
|
(23) а можно пункт 2 по подробней?
|
|||
28
grigo
20.08.12
✎
15:40
|
Если не срочно - на выходных запрос напишу, сейчас завал по работе.
|
|||
29
grigo
20.08.12
✎
15:43
|
(23) там вычитается не первый элемент из пары, а первый элемент с единицей
|
|||
30
Starhan
20.08.12
✎
15:44
|
(29)я так понял как раз из пары.
|
|||
31
Starhan
20.08.12
✎
15:44
|
Вообщем ТС плохо выразил мысль и привел неполный пример :(.
|
|||
32
grigo
20.08.12
✎
15:46
|
0. Перенумеровать все меченые.
1. Определяем четность каждого меченого 2. Определяем номер последнего четного НПЧ 3. Суммируем все четные СЧ 4. Суммируем все нечетные, номер которых Номера последнего четного. СН 5. Находим значение первого меченого. ЗПМ 5. Результат = Сч + Сн - ЗПМ*НПЧ/2 |
|||
33
Axel2009
20.08.12
✎
15:46
|
(31) так я про это и написал в (10)
|
|||
34
grigo
20.08.12
✎
15:47
|
(32) 4. Суммируем все нечетные, номер которых МЕНЬШЕ Номера последнего четного. СН
|
|||
35
Kashemir
20.08.12
✎
15:58
|
В результате тебе нужна общая или детализированная сумма всех пар ?
|
|||
36
Kashemir
20.08.12
✎
16:02
|
Вобщем вот решение с парами
ВЫБРАТЬ ТЗ.НомерСтроки, ТЗ.Элемент, ТЗ.Признак, ТЗ.Сумма ПОМЕСТИТЬ ТЗ ИЗ &ТЗ КАК ТЗ ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТЗ.НомерСтроки ПОМЕСТИТЬ ПозицииПунктов ИЗ ТЗ КАК ТЗ ГДЕ ТЗ.Признак = 1 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВложенныйЗапрос.ПозицияВхода, ВложенныйЗапрос.ПозицияВыхода, ВложенныйЗапрос.СчетчикПроходов КАК СчетчикПроходаКонтроляИндексы ИЗ (ВЫБРАТЬ ПозицииПунктов.НомерСтроки КАК ПозицияВыхода, КОЛИЧЕСТВО(ПозицииПунктов1.НомерСтроки) КАК СчетчикПроходов, МАКСИМУМ(ПозицииПунктов1.НомерСтроки) КАК ПозицияВхода ИЗ ПозицииПунктов КАК ПозицииПунктов ЛЕВОЕ СОЕДИНЕНИЕ ПозицииПунктов КАК ПозицииПунктов1 ПО ПозицииПунктов.НомерСтроки > ПозицииПунктов1.НомерСтроки СГРУППИРОВАТЬ ПО ПозицииПунктов.НомерСтроки) КАК ВложенныйЗапрос ГДЕ (ВЫРАЗИТЬ(ВложенныйЗапрос.СчетчикПроходов / 2 КАК ЧИСЛО(1, 0))) * 2 <> ВложенныйЗапрос.СчетчикПроходов ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВложенныйЗапрос.ПозицияВхода, ВложенныйЗапрос.ПозицияВыхода, СУММА(ТЗ.Сумма) КАК Сумма ИЗ (ВЫБРАТЬ ВложенныйЗапрос.ПозицияВхода КАК ПозицияВхода, ВложенныйЗапрос.ПозицияВыхода КАК ПозицияВыхода, ВложенныйЗапрос.СчетчикПроходов КАК СчетчикПроходаКонтроляИндексы ИЗ (ВЫБРАТЬ ПозицииПунктов.НомерСтроки КАК ПозицияВыхода, КОЛИЧЕСТВО(ПозицииПунктов1.НомерСтроки) КАК СчетчикПроходов, МАКСИМУМ(ПозицииПунктов1.НомерСтроки) КАК ПозицияВхода ИЗ ПозицииПунктов КАК ПозицииПунктов ЛЕВОЕ СОЕДИНЕНИЕ ПозицииПунктов КАК ПозицииПунктов1 ПО ПозицииПунктов.НомерСтроки > ПозицииПунктов1.НомерСтроки СГРУППИРОВАТЬ ПО ПозицииПунктов.НомерСтроки) КАК ВложенныйЗапрос ГДЕ (ВЫРАЗИТЬ(ВложенныйЗапрос.СчетчикПроходов / 2 КАК ЧИСЛО(1, 0))) * 2 <> ВложенныйЗапрос.СчетчикПроходов) КАК ВложенныйЗапрос ЛЕВОЕ СОЕДИНЕНИЕ ТЗ КАК ТЗ ПО ВложенныйЗапрос.ПозицияВхода < ТЗ.НомерСтроки И ВложенныйЗапрос.ПозицияВыхода >= ТЗ.НомерСтроки СГРУППИРОВАТЬ ПО ВложенныйЗапрос.ПозицияВхода, ВложенныйЗапрос.ПозицияВыхода |
|||
37
Kashemir
20.08.12
✎
16:06
|
||||
38
grigo
20.08.12
✎
16:09
|
Кашемир крут, я не правильно понял задачу )
|
|||
39
SUA
20.08.12
✎
16:10
|
(27)СУММА(ВТ.Значение)ИЗ ВТ КАК ВТ ГДЕ (ВЫРАЗИТЬ (ВТ.Признак/2 КАК Число(10,0)))*2<>ВТ.Признак
|
|||
40
Kashemir
20.08.12
✎
16:30
|
+(36) 3 пакетный запрос можно выкинуть - отладочный для четвертого. Выражение приведения к целому стоит увеличить по разрядности целой части.
(38) :) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |