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


Имеется такая таблица 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
27.09.2002, 07:40
    #32053504
Bin
Bin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
Господа, форум называется SQL.ru, вопрос тоже по SQL, база на Оракл, может вопрос туповатый??? или некорректно задан??? помогите плиз знатоки мож если не готовым запросом то хотябы умными мыслями!!!
...
Рейтинг: 0 / 0
27.09.2002, 08:16
    #32053509
Linker
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
если я правильно понял идею, то, ИМХО, тебе надо разобраться с этим
Код: 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
27.09.2002, 08:38
    #32053510
Bin
Bin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
По порядку
1. как нужно связать синонимы??
2. В подчеркнутом месте правильно так как имеется ввиду остаток на начало периода то бишь весь приход на этот день минус весь уход.
3. С DECODE смысл получить приход и уход от определенных цехов по коду от 10, 52, и всех остальных
Смысл всего запроса таков - считается остаток на начало периода, приход и уход в этом периоде, и остаток на конец периода
...
Рейтинг: 0 / 0
27.09.2002, 09:04
    #32053516
Linker
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
1) связывать их надо по ключевому полю. имеется такое?
2) не возражаю
3) вроде разобрался. Но лучше разбить на составные части.
...
Рейтинг: 0 / 0
27.09.2002, 10:27
    #32053554
Bin
Bin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
примари индекс есть PrData, Nakl
как я свяжу эти псевдонимы, если в общем случае записи в них не повторяются, то есть на начало периода берем одни записи, в периоде другие, на конец периода третьи
...
Рейтинг: 0 / 0
27.09.2002, 11:08
    #32053564
EVIL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
По-моему тут должно быть 3 запроса, не связанные между собой: для остатка на начало периода (a), для прихода и ухода на период (b и d) и остаток на конец периода (с)
...
Рейтинг: 0 / 0
27.09.2002, 11:20
    #32053572
Bin
Bin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
Само собой три отдельных запроса заработают запросто, дело в том что программа написана на Делфи 6 , для построения отчетов используется QuickReport 3.0.9, , и там я не представляю как соеденить три запроса , содержащих разное >1 кол - во записей, с группировкой
...
Рейтинг: 0 / 0
27.09.2002, 11:40
    #32053593
Linker
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
и мне кажется, что лучше будет разбить запросы.
...
Рейтинг: 0 / 0
27.09.2002, 13:55
    #32053671
Bin
Bin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
Эт понятно что лучше как потом отчет сформировать в QuickReport???
...
Рейтинг: 0 / 0
27.09.2002, 14:10
    #32053677
EVIL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
я считаю, что тебе к КвикРепортистам надо обращаться ... Ораклисты тебе чем могли - помогли :)
...
Рейтинг: 0 / 0
27.09.2002, 15:46
    #32053733
MW
MW
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
2 Bin
компонента QRSubDetail
А вообще в толстой книжке Архангельского в главе 12.2 и 5.6.3 это есть. Немного правда, но тебе хватит.
...
Рейтинг: 0 / 0
01.10.2002, 19:10
    #32054612
gminter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
Не пожалей 20$ - купи FastReport.
Там как раз такие отчеты с неизвестным числом столбцов и строить
...
Рейтинг: 0 / 0
02.10.2002, 20:31
    #32054973
Alexandr Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
Неосторожно
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
03.10.2002, 09:57
    #32055037
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
Неправда твоя, аггрегатные функции 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
03.10.2002, 17:16
    #32055264
Bin
Bin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
А напишу ко я пожалуй хранимую процедуру и в ней все сделаю, потом опубликую ежели кому интересно
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / SQL запрос / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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