powered by simpleCommunicator - 2.0.44     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / SQL запрос
16 сообщений из 16, страница 1 из 1
SQL запрос
    #32053285
Bin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мож ктонить встречался с такой задачей:
нада получить бухгалтерский отчет - остаток на начало месяца, приход , расход, остаток на конец месяца, ну и приходы и расходы от определенных цехов и цехам .


Имеется такая таблица PRRASH:
PRDATA DATE, дата
NAKL VARCHAR2(20), накладная
KODCEH NUMBER(3), код цеха
KODMLOM NUMBER(8), код продукта
PRIH NUMBER(10,3), приход
RASH NUMBER(10,3), расход
KODPRIZ NUMBER(2), код признака продукта
KODUCH NUMBER(6) код участка

к ней таблица-справочник MLom:
KodMLom Number,
NameMLom VARCHAR2(20),
KlassMLom VARCHAR2(20)
Вот такой запрос неправильно считает данные на начало и конец периода

select d.NameMlom,
sum(decode(b.KODCEH,10,b.PRIH,0)) as Ot10,
sum(decode(b.KODCEH,52,b.PRIH,0)) as Ot52,
sum(decode(b.KODCEH,10,0,decode(b.KODCEH,52,0,b.Prih))) as OtWseh,
sum(decode(b.KODCEH,10,b.Rash,0)) as Na10,
sum(decode(b.KODCEH,52,b.Rash,0)) as Na52,
sum(decode(b.KODCEH,10,0,decode(b.KODCEH,52,0,b.Rash))) as NaWseh,
sum(b.PRIH) as ItogoPrih
sum(b.RASH) as ItogoRash,
sum(c.PRIH-c.RASH) as OstatokEnd,
sum(a.PRIH-a.RASH) as OstatokBegin

from PRRASH a, PRRASH b, PRRASH c, Mlom d
where b.KodMlom=d.KodMlom
and b.PrData>='01.09.02' and b.PrData<='01.10.02'
and a.PrData<='01.09.02'
and c.PrData<='01.10.02'
group by d.NameMlom

Был бы рад помощи, может метод када несколько псевдонимов одной таблице присваиваются здесь не подходит??
...
Рейтинг: 0 / 0
SQL запрос
    #32053504
Bin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, форум называется SQL.ru, вопрос тоже по SQL, база на Оракл, может вопрос туповатый??? или некорректно задан??? помогите плиз знатоки мож если не готовым запросом то хотябы умными мыслями!!!
...
Рейтинг: 0 / 0
SQL запрос
    #32053509
Linker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если я правильно понял идею, то, ИМХО, тебе надо разобраться с этим
Код: plaintext
1.
2.
and b.PrData>='01.09.02' and b.PrData<='01.10.02' 
and a.PrData<='01.09.02' 
and c.PrData<='01.10.02' 


у тебя синонимы a, b, c - это одна и та же таблица, но:
1) эти синонимы не связаны между собой в условии where
2) в подчеркнутом месте разве не >= ?
3) с decode в начале - очень уж туманные цели. Поясни.
...
Рейтинг: 0 / 0
SQL запрос
    #32053510
Bin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По порядку
1. как нужно связать синонимы??
2. В подчеркнутом месте правильно так как имеется ввиду остаток на начало периода то бишь весь приход на этот день минус весь уход.
3. С DECODE смысл получить приход и уход от определенных цехов по коду от 10, 52, и всех остальных
Смысл всего запроса таков - считается остаток на начало периода, приход и уход в этом периоде, и остаток на конец периода
...
Рейтинг: 0 / 0
SQL запрос
    #32053516
Linker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1) связывать их надо по ключевому полю. имеется такое?
2) не возражаю
3) вроде разобрался. Но лучше разбить на составные части.
...
Рейтинг: 0 / 0
SQL запрос
    #32053554
Bin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
примари индекс есть PrData, Nakl
как я свяжу эти псевдонимы, если в общем случае записи в них не повторяются, то есть на начало периода берем одни записи, в периоде другие, на конец периода третьи
...
Рейтинг: 0 / 0
SQL запрос
    #32053564
Фотография EVIL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-моему тут должно быть 3 запроса, не связанные между собой: для остатка на начало периода (a), для прихода и ухода на период (b и d) и остаток на конец периода (с)
...
Рейтинг: 0 / 0
SQL запрос
    #32053572
Bin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Само собой три отдельных запроса заработают запросто, дело в том что программа написана на Делфи 6 , для построения отчетов используется QuickReport 3.0.9, , и там я не представляю как соеденить три запроса , содержащих разное >1 кол - во записей, с группировкой
...
Рейтинг: 0 / 0
SQL запрос
    #32053593
Linker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и мне кажется, что лучше будет разбить запросы.
...
Рейтинг: 0 / 0
SQL запрос
    #32053671
Bin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эт понятно что лучше как потом отчет сформировать в QuickReport???
...
Рейтинг: 0 / 0
SQL запрос
    #32053677
Фотография EVIL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я считаю, что тебе к КвикРепортистам надо обращаться ... Ораклисты тебе чем могли - помогли :)
...
Рейтинг: 0 / 0
SQL запрос
    #32053733
MW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Bin
компонента QRSubDetail
А вообще в толстой книжке Архангельского в главе 12.2 и 5.6.3 это есть. Немного правда, но тебе хватит.
...
Рейтинг: 0 / 0
SQL запрос
    #32054612
gminter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не пожалей 20$ - купи FastReport.
Там как раз такие отчеты с неизвестным числом столбцов и строить
...
Рейтинг: 0 / 0
SQL запрос
    #32054973
Alexandr Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неосторожно
1) sum(b.PRIH) когда хоть одно b.PRIH null, то вся сумма null.
2) здесь "and b.PrData>='01.09.02'
and a.PrData<='01.09.02' "
по семантике вероятно могут данные пропадать или
могут появляться лишние (повторные подсчеты того же), когда
несколько псевдонимов одной таблице - это несколько
таблиц, где where нестрого.
3) ...
...
Рейтинг: 0 / 0
SQL запрос
    #32055037
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неправда твоя, аггрегатные функции null-значения игнорируют.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
sql> create table test(id integer);

Table created.

sql> insert into test values ( 1 );

 1  row created.

sql> insert into test values ( 2 );

 1  row created.

sql> insert into test values (null);

 1  row created.

sql>  select sum(id), max(id), min(id), avg(id) from test;

   SUM(ID)    MAX(ID)    MIN(ID)    AVG(ID)
 ---------- ---------- ---------- ----------
 
          3            2            1          1 , 5 
...
Рейтинг: 0 / 0
SQL запрос
    #32055264
Bin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А напишу ко я пожалуй хранимую процедуру и в ней все сделаю, потом опубликую ежели кому интересно
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / SQL запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]