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

Skellar

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

СГРУППИРОВАТЬ ПО
ВаловаяПрибыль.Период,
ВаловаяПрибыль.Сумма,
ВаловаяПрибыль.Показатель) КАК ВП
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
Сч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, результаты вывод увеличатся вдвое. Вопрос - как получить из КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВП.Показатель) обычное число? Или как сделать условие, чтобы оно реагировало?
 

Skellar

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

unknown181538

НеГуру
28.12.2008
1 417
0
#4
Условие надо в секцию ГДЕ, или как? Почему нельзя его туда написать?
 

Skellar

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

unknown181538

НеГуру
28.12.2008
1 417
0
#6
Сгруппируйте в запросе, поместите во временную таблицу, или во вложенный запрос, и еще одним запросом обработайте результат.
 

Skellar

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

Skellar

Well-Known Member
22.07.2008
87
0
#9
Поместил свой запрос в еще один вложенный. Тот же результат. Что вам не нравится в моем русском?
 

unknown181538

НеГуру
28.12.2008
1 417
0
#10
А.... просто не читал все.

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


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

Skellar

Well-Known Member
22.07.2008
87
0
#11
Да, я в 7ом сообщении писал. Та же фигня. Есть еще какие-нибудь мысли? = \
 

unknown181538

НеГуру
28.12.2008
1 417
0
#12
Просто в первом посте у вас есть переменная "Раздел", а верхний запрос выбирает не ее.
 

Skellar

Well-Known Member
22.07.2008
87
0
#13
Вобщем не понимаю я, что делать. Задвоение происходит из за того, что ВП по сути состоит из объединения двух таблиц.
 

Darlock

Well-Known Member
04.01.2008
560
1
#14
Попробуйте разложить вашу махину на более простые запросы и использовать пакет запросов (временные таблицы) станет проще разбираться с траблой и вам и нам
 

unknown181538

НеГуру
28.12.2008
1 417
0
#15
Попробуйте разложить вашу махину на более простые запросы и использовать пакет запросов (временные таблицы) станет проще разбираться с траблой и вам и нам
+ к тому, есть консоль запросов, которая позволяет просматривать содержимое временных таблиц.
 

Allexei

Well-Known Member
02.05.2008
322
1
#16
Количество различные определяется на этапе работы с выбранной информацией а не на этапе выборки данных. То бишь весь запрос во временную таблицу а после применяйте формулу к нему.
 

Skellar

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