• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Получение значения группировки

  • Автор темы Skellar
  • Дата начала
S

Skellar

Подскажите, есть запрос :
Код:
ВЫБРАТЬ
ВП.Показатель,
ВП.Период,
"Формула",
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВП.Показатель)
ИЗ
(ВЫБРАТЬ
ВаловаяПрибыль.Показатель КАК Показатель,
ВаловаяПрибыль.Период КАК Период,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВаловаяПрибыль.Показатель) КАК Раздел,
ВаловаяПрибыль.Сумма КАК Сумма
ИЗ
ВаловаяПрибыль КАК ВаловаяПрибыль

СГРУППИРОВАТЬ ПО
ВаловаяПрибыль.Период,
ВаловаяПрибыль.Сумма,
ВаловаяПрибыль.Показатель) КАК ВП
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
Сч9001.Период КАК Период,
Сч9001.Сумма КАК Сумма,
Сч9001.Показатель КАК Показатель
ИЗ
Сч9001 КАК Сч9001) КАК Выручка
ПО ВП.Период = Выручка.Период
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ДоходыРасходы.Период КАК Период,
ДоходыРасходы.Сумма КАК Сумма,
ДоходыРасходы.Показатель КАК Показатель
ИЗ
(ВЫБРАТЬ
Сч9101.Период КАК Период,
Сч9101.Раздел КАК Раздел,
Сч9101.Показатель КАК Показатель,
ЕСТЬNULL(Сч9101.Сумма, 0) КАК Сумма
ИЗ
Сч9101 КАК Сч9101

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
Сч9102.Период,
Сч9102.Раздел,
Сч9102.Показатель,
ЕСТЬNULL(-Сч9102.Сумма, 0)
ИЗ
Сч9102 КАК Сч9102) КАК ДоходыРасходы) КАК ДохРас
ПО ВП.Период = ДохРас.Период
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
Сч9008.Период КАК Период,
Сч9008.Сумма КАК Сумма,
Сч9008.Показатель КАК Показатель
ИЗ
Сч9008 КАК Сч9008) КАК ОХР
ПО ВП.Период = ОХР.Период

СГРУППИРОВАТЬ ПО
ВП.Период,
ВП.Показатель,
ВП.Сумма

Как получить значение КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВП.Показатель) ? В отчете выводятся различные количества (2 и 1). При попытке поставить условие типа: Если Количество..... = 2 Тогда Выполнить. Но это условие не выполняется. А если написать КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВП.Показатель)+1, результаты вывод увеличатся вдвое. Вопрос - как получить из КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВП.Показатель) обычное число? Или как сделать условие, чтобы оно реагировало?
 
S

Skellar

Перезапарился я с этими отчетами уже. Сейчас попробую корректнее сформулировать. Пятая строка описания запроса - поле КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВП.Показатель). Оно выводит в таблицу цифорки 1 или 2 в зависимости от ВП.Показатель. Мне нужно сделать условие с КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВП.Показатель). Условие должно быть таким: Если КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВП.Показатель) = 2, то блаблабла. Условие не выполняется. Не выполняется и все тут. Думается, что из-за группировок, но их убирать нельзя. Как сделать, чтобы условие выполнялось?
Из замеченного - если написать "КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВП.Показатель)+1 " - будут выводится цифорки 2 или 4.
Пояснение - ВП это таблица вложенного запроса, формируется из таблицы ВаловаяПрибыль, которая является временной таблицей, которая формируется из объединения двух временных таблиц. Здесь привел только кусок кода, в самом запросе строк 250-300. Приводить остальной текст считаю нецелесообразным.
Так понятнее?
 
U

unknown181538

Условие надо в секцию ГДЕ, или как? Почему нельзя его туда написать?
 
S

Skellar

Простите, а как оно будет выглядеть в "где" ?
Я планировал сделать поле условием и выводить вот так:
ВЫБОР КОГДА КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВП.Показатель)=2 ТОГДА (длинная формула) ИНАЧЕ (другая формула) КОНЕЦ
Не выходит, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВП.Показатель) считает себя равным единице. Что ж я делаю не так ?
 
U

unknown181538

Сгруппируйте в запросе, поместите во временную таблицу, или во вложенный запрос, и еще одним запросом обработайте результат.
 
S

Skellar

У меня в запросе есть вложенный вопрос ВП, там идет группировка и я делаю отдельное поле КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВаловаяПрибыль.Показатель) КАК Раздел. Так вот, попытка проделать вышеперечисленное с этим Раздел тоже проваливается.
Я правильно понял, вы такой подход имеете ввиду?
 
S

Skellar

Поместил свой запрос в еще один вложенный. Тот же результат. Что вам не нравится в моем русском?
 
U

unknown181538

А.... просто не читал все.

ВЫБРАТЬ
ВП.Показатель,
ВП.Период,
"Формула",
ВЫБОР КОГДА ВП.Раздел=2 ТОГДА
....
ИНАЧЕ
....
КОНЕЦ КАК
ИЗ
(ВЫБРАТЬ
ВаловаяПрибыль.Показатель КАК Показатель,
ВаловаяПрибыль.Период КАК Период,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВаловаяПрибыль.Показатель) КАК Раздел,


Так пробовали?
 
S

Skellar

Да, я в 7ом сообщении писал. Та же фигня. Есть еще какие-нибудь мысли? = \
 
U

unknown181538

Просто в первом посте у вас есть переменная "Раздел", а верхний запрос выбирает не ее.
 
S

Skellar

Вобщем не понимаю я, что делать. Задвоение происходит из за того, что ВП по сути состоит из объединения двух таблиц.
 
D

Darlock

Попробуйте разложить вашу махину на более простые запросы и использовать пакет запросов (временные таблицы) станет проще разбираться с траблой и вам и нам
 
U

unknown181538

Попробуйте разложить вашу махину на более простые запросы и использовать пакет запросов (временные таблицы) станет проще разбираться с траблой и вам и нам
+ к тому, есть консоль запросов, которая позволяет просматривать содержимое временных таблиц.
 
A

Allexei

Количество различные определяется на этапе работы с выбранной информацией а не на этапе выборки данных. То бишь весь запрос во временную таблицу а после применяйте формулу к нему.
 
S

Skellar

Allexei, Попробовал, результат Количества при таком выводе везде был = 1.
Darlock, Да весь запрос и так разложен на кучу временных таблиц. Просто итог - стыковка нескольких таблиц, результаты в которых есть результат формул ,которые применяются к разным значениям этих временных таблиц. Стыковал через объединения. Старался максимально упростить конструкцию, но все равно получилось много строк.
Проблема была в том, что основная таблица ВП формировалась из ОБЪЕДИНЕНИЯ двух временных таблиц. На начальном этапе работы не получилось полным соединением сделать корректно, некоторые строки или суммы не выводились. А из-за ОБЪЕДИНЕНИЯ и были проблемы. В итоге решил все сделав полное соединение и использовав ЕСТЬNULL(ПараметрВременнойТаблицы1,ПараметрВременнойТаблицы2).
Всем большое спасибо!
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!