Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2 3      [все]
 Сложный запрос  [new]
sidiscom
Member

Откуда:
Сообщений: 115
Есть три таблицы
Пункты
таблица KFR
P1, P2 и тд.
в пунктах есть точки A1, A2, И тд.
kfr pps
A1 P1
A2 P1
A3 P2


Операции в течении дня по точкам
Таблица OPA
sd- сумма дебет
sk - сумма кредит
dat -Дата
kfr sd sk dat
A1 10 0 01.09.2017
A2 20 0 01.09.2017
A2 0 15 01.09.2017


Баланс на каждый день по точке
Таблица BAL
si - исходящий баоланс
od - по дебету
ok - по кредиту
kfr dat si od ok
A1 01.09.2017 10 10 0
A2 01.09.2017 5 20 15


необходимо получить итог по пункту
чтобы исходящий остаток si (пункта) был как сумма si точек
sv = si - od+ ok
dat si sd sk sv
01.09.2017 15 10 0 0
01.09.2017 15 20 0 0
01.09.2017 15 0 015


Если в пункте одна точка я сделал так
SELECT
b.dat,b.si,o.sd, o.sk
(b.si - b.od + b.ok) AS sv
FROM
bal b, opa o
WHERE
o.dat=b.dat
AND
o.dat between '01.08.2017' AND '31.08.2017'
AND
o.kfr=b.kfr and b.kfr = 'A1'
ORDER BY
b.dat


как сделать для пункта с несколькими точками
1 сен 17, 14:55    [20764814]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 28244

sidiscom, ты так и не открывал учебник по SQL...

Posted via ActualForum NNTP Server 1.5

1 сен 17, 14:57    [20764822]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
sidiscom
Member

Откуда:
Сообщений: 115
Мимопроходящий,
трудно доходит, многое не понимаю, но стараюсь
1 сен 17, 15:07    [20764849]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 247
Похоже на бухгалтерию. Дебет/Кредит, Сальдо/Бульдо.
1 сен 17, 15:09    [20764856]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
sidiscom
Member

Откуда:
Сообщений: 115
да, так и есть
1 сен 17, 15:13    [20764864]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
Arioch
Member

Откуда:
Сообщений: 9038
sidiscom
трудно доходит


предлагаю нырнуть в омут с головой

http://www.sql.ru/forum/964534-a/hranimye-agregaty-bez-konfliktov-i-blokirovok-recept
1 сен 17, 15:36    [20764946]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 247
sidiscom,

Вы сами посмотрели бы sum, group by. Хотя бы в руководстве по FB. Не говоря уже о другой литературе. Действительно, не хочется азы объяснять.
1 сен 17, 16:47    [20765230]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 26550
sidiscom
Баланс на каждый день по точке
Таблица BAL

интересно, а как у вас эта таблица заполняется?
1 сен 17, 17:43    [20765391]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
sidiscom
Member

Откуда:
Сообщений: 115
kdv
sidiscom
Баланс на каждый день по точке
Таблица BAL

интересно, а как у вас эта таблица заполняется?

тригер + процедуры после добавления записи в таблицу OPA
2 сен 17, 22:08    [20767343]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
Старый плюшевый мишка
Member

Откуда:
Сообщений: 197
sidiscom
kdv
пропущено...

интересно, а как у вас эта таблица заполняется?

тригер + процедуры после добавления записи в таблицу OPA


А через месяц приходит бухгалтер и говорит - тут наших "контрагентов" в очередной раз прижопили и вот эти 10 машин мы должны типа купить у другой фирмы за другие деньги и в другие даты, а вот эти семь продать двум другим и тоже не как было ;)
3 сен 17, 00:22    [20767591]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 26550
sidiscom
тригер + процедуры после добавления записи в таблицу OPA

"я так и знал". Повезло, что конфликтов по обновлению одной и той же записи нет. Операции, видимо, редкие.
В любом случае, придется учить sum и group by, об этом уже сказали.
3 сен 17, 00:26    [20767597]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 26550
Старый плюшевый мишка,

правильно написанным триггерам на update и delete это не помешает.
3 сен 17, 00:27    [20767600]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
Старый плюшевый мишка
Member

Откуда:
Сообщений: 197
kdv
sidiscom
тригер + процедуры после добавления записи в таблицу OPA

"я так и знал". Повезло, что конфликтов по обновлению одной и той же записи нет. Операции, видимо, редкие.


Не операции редкие, а wait-транзакция и изменения приращениями, а не прочитал-изменил-записал.
3 сен 17, 01:42    [20767682]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
Старый плюшевый мишка
Member

Откуда:
Сообщений: 197
kdv
Старый плюшевый мишка,

правильно написанным триггерам на update и delete это не помешает.


Дим. Я столько наелся с хранимыми оборотными ведомостями с архивами... Там с глузду съедешь корректировать ФСЁ, и продавца, и покупателя, и цены, и количества, и даты, и себестоимость, и вычерпанность ГТД, а если, не дай бог, это сырьё на переработку разной степени глубины, в смысле замены кода ТНВД или нет, и всё через месяц-другой, когда прошло тысяч десять операций по каждому товару... И помесячно и поквартально. Храниться должно только то, что уже железно передано в фискальные органы.
3 сен 17, 01:51    [20767689]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
Старый плюшевый мишка
Member

Откуда:
Сообщений: 197
Вдогонку - это я о бухгалтерии, услышав слово "баланс". Управленческий учёт, то есть, всё по честному, как оно и есть - это другая тема.
3 сен 17, 01:53    [20767690]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1141
Старый плюшевый мишка
в смысле замены кода ТНВД


Может быть НГТД а не ТНВД?
4 сен 17, 04:04    [20768734]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
Декларант
Guest
fraks
Старый плюшевый мишка
в смысле замены кода ТНВД
Может быть НГТД а не ТНВД?
Неа.

НГТД = Неполная (предварительная) ГТД. : документ.
ТНВД = Товарная номенклатура внешнеэкономической деятельности. : справочник кодов товаров из туевой хучи томов.
4 сен 17, 06:29    [20768766]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
sidiscom
Member

Откуда:
Сообщений: 115
kdv
sidiscom
тригер + процедуры после добавления записи в таблицу OPA

"я так и знал". Повезло, что конфликтов по обновлению одной и той же записи нет. Операции, видимо, редкие.
В любом случае, придется учить sum и group by, об этом уже сказали.


Sum и group by по таблице BAL я разобрался (надеюсь)
select b.dat, sum(b.si) as si from bal  b
join kfr k on b.kfr = k.kfr
where
k.pps = 'P1'
and
b.dat between '01.08.2017' AND '31.08.2017'
and
b.nls = '241.1'
group by k.pps,  b.dat


как добавить строки с OPA?
5 сен 17, 11:39    [20772091]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 247
sidiscom,

а какую информацию нужно вытянуть из OPA?
5 сен 17, 12:05    [20772213]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 26550
sidiscom
Sum и group by по таблице BAL я разобрался (надеюсь)


нет. должно быть

select k.pps, b.dat, sum(b.si)
group by k.pps, b.dat

то есть, в селекте выбираем столбцы group by плюс агрегаты.
5 сен 17, 12:27    [20772304]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 247
kdv
sidiscom
Sum и group by по таблице BAL я разобрался (надеюсь)


нет. должно быть

select k.pps, b.dat, sum(b.si)
group by k.pps, b.dat

то есть, в селекте выбираем столбцы group by плюс агрегаты.


Необязательно. В group by могут быть поля, которых нет в select. Нечитаемо, это да.
5 сен 17, 13:32    [20772652]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
sidiscom
Member

Откуда:
Сообщений: 115
kdv
sidiscom
Sum и group by по таблице BAL я разобрался (надеюсь)


нет. должно быть

select k.pps, b.dat, sum(b.si)
group by k.pps, b.dat

то есть, в селекте выбираем столбцы group by плюс агрегаты.


Спасибо большое

KreatorXXI
sidiscom,

а какую информацию нужно вытянуть из OPA?


все строки за указанный период и принадлежащие пункту (например P1)
5 сен 17, 13:37    [20772669]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
sidiscom
Member

Откуда:
Сообщений: 115
Я видимо не правильно объяснил
необходимо к строкам OPA добавить столбец исходящий остаток пункта на дату и вычисляемый входящий остаток на дату
и это все за указанный период
5 сен 17, 13:41    [20772693]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 247
sidiscom,

Да всё равно непонятно (видимо, не только мне, поскольку все молчат). В чём разница таблиц BAL и OPA? Мне показалось BAL это уже на основе OPA. Нет?
5 сен 17, 15:30    [20773176]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
sidiscom
Member

Откуда:
Сообщений: 115
KreatorXXI
sidiscom,

Да всё равно непонятно (видимо, не только мне, поскольку все молчат). В чём разница таблиц BAL и OPA? Мне показалось BAL это уже на основе OPA. Нет?


да, в таблице BAL формируется исходящий остаток и обороты по дебету и кредиту за день
5 сен 17, 15:47    [20773296]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 247
sidiscom,

Значит OPA не причём? Если Вы написали запрос по суммированию за месяц, то исходящий остаток вычисляется также, только период дат берётся другой, например:
b.dat < '01.08.2017'

Можно ещё воспользоваться оконными функциями, чтобы получить то, что надо в одном запросе.
5 сен 17, 16:29    [20773450]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
sidiscom
Member

Откуда:
Сообщений: 115
KreatorXXI,

Мне нужно вывести все строки из OPA за указанный период и принадлежащие, например Р1
и добавить столбец исходящего остатка P1 на каждую дату
ppskfrdatsisdsk
P1A101.09.201715100
P1A201.09.201715200
P1A201.09.201715015
5 сен 17, 16:40    [20773487]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 247
sidiscom,

А вот так:
select a.*, b.si
from OPA a
       inner join BAL b on b.kfr=a.kfr and b.dat=a.dat

?

Это ВСЕ строки из OPA плюс исходящий остаток из BAL.
5 сен 17, 17:22    [20773601]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
sidiscom
Member

Откуда:
Сообщений: 115
KreatorXXI
sidiscom,

А вот так:
select a.*, b.si
from OPA a
       inner join BAL b on b.kfr=a.kfr and b.dat=a.dat

?

Это ВСЕ строки из OPA плюс исходящий остаток из BAL.


это получиться по точкам, kfr, а мне нужен баланс пункта, pps
поэтому рекомендовали sum и group by
5 сен 17, 17:33    [20773625]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
sidiscom
Member

Откуда:
Сообщений: 115
Может есть у кого-то еще советы
6 сен 17, 17:15    [20776302]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 28244

книжки по SQL читай.

Posted via ActualForum NNTP Server 1.5

6 сен 17, 17:18    [20776313]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
sidiscom
Member

Откуда:
Сообщений: 115
Мимопроходящий
книжки по SQL читай.

этот совет я и без Вас знаю,
почему, когда люди знают намного больше других, они корону одевают?
Вы во всех областях такой же шустрый?
6 сен 17, 17:27    [20776354]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 28244

06.09.2017 17:27, sidiscom пишет:
> этот совет я и без Вас знаю

почему не читаешь?

Posted via ActualForum NNTP Server 1.5

6 сен 17, 17:29    [20776363]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 247
sidiscom,

Надо переформулировать требования. Вы сказали "мне нужны все строки из OPA". Не так? Не нужны? Или что?
6 сен 17, 17:32    [20776372]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
чччД
Guest
sidiscom,

если трудности с пониманием агрегатов, тупо посчитай "руками", в ХП или в EB. Или на клиенте. Наши студенты часто так делают.
6 сен 17, 17:41    [20776398]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
sidiscom
Member

Откуда:
Сообщений: 115
Мимопроходящий
06.09.2017 17:27, sidiscom пишет:
> этот совет я и без Вас знаю

почему не читаешь?


я читаю, и все ваши советы я прорабатываю
но Вы понимаете это с первого раза, Ваше мышление это позволяет, мне так не дано
я не прошу Вас написать запрос за меня, прошу направить

KreatorXXI
sidiscom,

Надо переформулировать требования. Вы сказали "мне нужны все строки из OPA". Не так? Не нужны? Или что?


за указанный период к строкам из ОPA добавляется столбец SI (исходящий остаток) всего пункта, а не этой точки
6 сен 17, 17:43    [20776401]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
sidiscom
Member

Откуда:
Сообщений: 115
чччД
sidiscom,

если трудности с пониманием агрегатов, тупо посчитай "руками", в ХП или в EB. Или на клиенте. Наши студенты часто так делают.


Т.е.
SELECT * 
FROM OPA O
JOIN KFR K ON K.KFR=O.KFR
LEFT JOIN MY_PROC(DATSTART, DATEND, PPS) ON ......
WHERE K.PPS = '' AND DAT BETWEEN '' AND ''


MY_PROC -процедура которая возвращает набор значений (дата, исходящий остаток на эту дату, входящий остаток на дату)

P.S.
не пинайте сильно
7 сен 17, 09:56    [20777431]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 247
sidiscom
Мимопроходящий
06.09.2017 17:27, sidiscom пишет:
> этот совет я и без Вас знаю

почему не читаешь?


я читаю, и все ваши советы я прорабатываю
но Вы понимаете это с первого раза, Ваше мышление это позволяет, мне так не дано
я не прошу Вас написать запрос за меня, прошу направить

KreatorXXI
sidiscom,

Надо переформулировать требования. Вы сказали "мне нужны все строки из OPA". Не так? Не нужны? Или что?


за указанный период к строкам из ОPA добавляется столбец SI (исходящий остаток) всего пункта, а не этой точки


Как всего пункта? В таблице BAL у Вас же информация по точкам.

Я всё же предлагаю заново объяснить проблему. Привести DDL таблиц, чтобы были понятно содержимое столбцов, связи таблиц. И внятно написать - что хотите получить.

А хранимка нафиг не нужна. Ради 3-5 строчек запроса писать храмимку?
7 сен 17, 11:37    [20777963]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
sidiscom
Member

Откуда:
Сообщений: 115
Есть таблицы
(на примере торговли)
PPS
(справочник магазинов)
idpps
1P1
2P2
3P3


KFR
(справочник касс в магазинах)
ppskfr
P1A1
P1A2
P2A3
P3A4


OPA
(операции в течении дня, что-то покупается, что-то продается на кассах)
datsdskkfr
01.09.2017100A1
01.09.2017200A2
02.09.2017015A2

sd- сумма дебет
sk - сумма кредит

BAL
(таблица сальдо кассы, заполняется процедурой на основании документа OPA)
kfrdatsisdsk
A101.09.201710100
A201.09.201720200
A202.09.20175015


необходимо вывести операции за период с входящим и исходящим остатком магазина
(01.09.2017 - 02.09.2017 для магазина P1)
datsisdsksvkfr
01.09.2017301000A1
01.09.2017302000A2
02.09.20171501530A2
11 сен 17, 09:17    [20785688]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
Ivan_Pisarevsky
Member

Откуда: НН
Сообщений: 7676
sidiscom
необходимо вывести операции за период с входящим и исходящим остатком
Если будут свои попытки решения, то 0, иначе $100 и запрос будет готов минут через 10.
11 сен 17, 10:30    [20785904]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 247
sidiscom,

Попробуйте вот так:
select a.kfr,
         ( select c.si
          from BAL c
          where c.kfr=a.kfr and c.dat='2017-09-01'
        ),
        sum(a.sd),
        sum(a.sk),  
         ( select d.si + a.sd - a.sk
          from BAL d
          where d.kfr=a.kfr and d.dat='2017-09-30'
        )
from BAL a
       inner join KFR b on b.kfr=a.kfr
where b.pps='P1' and a.dat between '2017-09-01' and '2017-09-30'
group by 1, 2, 5
11 сен 17, 11:19    [20786062]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
Ivan_Pisarevsky
Member

Откуда: НН
Сообщений: 7676
KreatorXXI
sidiscom,

Попробуйте вот так:
select a.kfr,
         ( select c.si
          from BAL c
          where c.kfr=a.kfr and c.dat='2017-09-01'
        ),
        sum(a.sd),
        sum(a.sk),  
         ( select d.si + a.sd - a.sk
          from BAL d
          where d.kfr=a.kfr and d.dat='2017-09-30'
        )
from BAL a
       inner join KFR b on b.kfr=a.kfr
where b.pps='P1' and a.dat between '2017-09-01' and '2017-09-30'
group by 1, 2, 5
У меня подозрение, что работать это будет не быстро, лучше движуху приджойнить, а не получать позапросом.
счематично:
select a.kfr, b.dat
        sum(a.sd),
        sum(сase when ПРИХОД)  as debet      
        sum(case when РАСХОД)  as credit
        sum(a.sk),  
from BAL a
       inner join KFR b on b.kfr=a.kfr
       left join OPA d on d.kfr=a.kfr and d.dat = b.dat
where b.pps='P1' and a.dat between '2017-09-01' and '2017-09-30'
group by 1,2
11 сен 17, 12:31    [20786332]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 247
Ivan_Pisarevsky,

Спорить пока рано. Не ясно - правильно вообще или нет. Я посчитал, что таблица BAL это уже некое суммирование по OPA. Индексы тоже не известны.
11 сен 17, 13:50    [20786722]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
sidiscom
Member

Откуда:
Сообщений: 115
KreatorXXI
Ivan_Pisarevsky,

Спорить пока рано. Не ясно - правильно вообще или нет. Я посчитал, что таблица BAL это уже некое суммирование по OPA. Индексы тоже не известны.


BAL это таблица в которой суммируются приход, расход и вычисляется исходящий остаток в разрезе касс на основании документов OPA
11 сен 17, 14:03    [20786774]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
Ivan_Pisarevsky
Member

Откуда: НН
Сообщений: 7676
sidiscom
BAL это таблица...
С твоей стороны таки будут попытки решения? Или топик отправляется в утиль.
11 сен 17, 14:24    [20786870]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
WildSery
Member

Откуда: да, оттуда.
Сообщений: 12826
Я не понимаю, как вы вообще с серьёзными лицами таблицу OPA обсуждаете.
11 сен 17, 15:08    [20787103]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
Ivan_Pisarevsky
Member

Откуда: НН
Сообщений: 7676
WildSery
Я не понимаю, как вы вообще с серьёзными лицами таблицу OPA обсуждаете.
Какое тут обсуждение? Руки чешутся грохнуть нафиг.
11 сен 17, 15:18    [20787169]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
Старый плюшевый мишка
Member

Откуда:
Сообщений: 197
WildSery
Я не понимаю, как вы вообще с серьёзными лицами таблицу OPA обсуждаете.


Там двух буков не хватает. ZH.
11 сен 17, 16:36    [20787563]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57224
OPAZH!

Хватит уже глумиться, закрывайте.
Только в теге укажите автору, что
пусть показывает свои неудачные
попытки решить сабж.

Posted via ActualForum NNTP Server 1.5

11 сен 17, 17:11    [20787733]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
sidiscom
Member

Откуда:
Сообщений: 115
Гаджимурадов Рустам
OPAZH!

Хватит уже глумиться, закрывайте.
Только в теге укажите автору, что
пусть показывает свои неудачные
попытки решить сабж.


Спасибо, теперь я понимаю откуда у Вас такое количество сообщений

Моих очень скромных познаний хватило только на вложенные запросы
SELECT o.dat,o.sd,o.sk,
(SELECT sum(b.si) FROM bal b ......) as si,
(SELECT (sum(b.si)-sum(b.sd)+sum(b.sk)) FROM bal b .....) as sv
FROM opa o
JOIN kfr k ON k.kfr=o.kfr 
WHERE 
k.pps = ''
AND 
o.dat between "" and ""


данный запрос работает, понимаю, что это не то решение которое должно было получиться
12 сен 17, 08:54    [20788812]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57224
sidiscom> данный запрос работает

И? Что в нём не устраивает? Скорость, результат?
Аналогичные вопросы по приведённым выше двум запросам.

Posted via ActualForum NNTP Server 1.5

12 сен 17, 09:11    [20788870]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57224
sidiscom
OPA
(операции в течении дня, что-то покупается, что-то продается на кассах)
datsdskkfr
01.09.2017100A1

sd- сумма дебет
sk - сумма кредит

BAL
(таблица сальдо кассы, заполняется процедурой на основании документа OPA)
kfrdatsisdsk
A101.09.201710100


необходимо вывести операции за период с входящим и исходящим остатком магазина
(01.09.2017 - 02.09.2017 для магазина P1)
datsisdsksvkfr
01.09.2017301000A1

Присмотрелся повнимательнее к данным. Как получается 30 ?
12 сен 17, 09:55    [20789021]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 247
Гаджимурадов Рустам,

тут, по-моему вообще клиника. Посмотрите запрос ТС. BAL - это некие итого по OPA. А в запросе основная таблица OPA, а суммирование по BAL. Есть ещё подозрение, что схема данных совсем другая нежели описано.
12 сен 17, 10:16    [20789097]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
sidiscom
Member

Откуда:
Сообщений: 115
Гаджимурадов Рустам
sidiscom
OPA
(операции в течении дня, что-то покупается, что-то продается на кассах)
datsdskkfr
01.09.2017100A1

sd- сумма дебет
sk - сумма кредит

BAL
(таблица сальдо кассы, заполняется процедурой на основании документа OPA)
kfrdatsisdsk
A101.09.201710100


необходимо вывести операции за период с входящим и исходящим остатком магазина
(01.09.2017 - 02.09.2017 для магазина P1)
datsisdsksvkfr
01.09.2017301000A1

Присмотрелся повнимательнее к данным. Как получается 30 ?


datsdskkfr
01.09.2017200A2

В этот день была еще одна проводка на кассе А2 на сумму 20 руб. Общий итог для магазина Р1 у которого кассы (А1 и А2) будет 30 руб
12 сен 17, 10:33    [20789143]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57224
KreatorXXI> Посмотрите запрос ТС.

Запросы ТС - это ладно, ошибиться нубу немудрено.
Но данные исходные и желаемые-то он должен
правильно привести хотя бы.

Posted via ActualForum NNTP Server 1.5

12 сен 17, 10:33    [20789147]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
sidiscom
Member

Откуда:
Сообщений: 115
KreatorXXI
Гаджимурадов Рустам,

тут, по-моему вообще клиника. Посмотрите запрос ТС. BAL - это некие итого по OPA. А в запросе основная таблица OPA, а суммирование по BAL. Есть ещё подозрение, что схема данных совсем другая нежели описано.


Это делать удобней, так как в таблице BAL кроме исходящего остатка на конец дня, уже есть общие суммы по дебету и по кредиту для кассы (А1 и А2). Получается надо просто сложить данные двух строк (для разных касс) принадлежащих одному магазину Р1
12 сен 17, 10:39    [20789168]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57224
sidiscom
(01.09.2017 - 02.09.2017 для магазина P1)
dat si sd sk sv kfr
01.09.2017 30 10 0 0 A1

dat sd sk kfr
01.09.2017 20 0 A2

В этот день была еще одна проводка на кассе А2 на сумму 20 руб. Общий итог для магазина Р1 у которого кассы (А1 и А2) будет 30 руб


Чушь какая-то... ОК, допустим, что это нарастающий итог
по магазину, типа OVER и к кассе в строках не относится.
Тогда что со следующими двумя строками:

BAL
(таблица сальдо кассы, заполняется процедурой на основании документа OPA)
kfrdatsisdsk
A202.09.20175015


необходимо вывести операции за период с входящим и исходящим остатком магазина
(01.09.2017 - 02.09.2017 для магазина P1)
datsisdsksvkfr
02.09.20171501530A2


Posted via ActualForum NNTP Server 1.5

12 сен 17, 10:41    [20789174]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
sidiscom
Member

Откуда:
Сообщений: 115
Гаджимурадов Рустам
KreatorXXI> Посмотрите запрос ТС.

Запросы ТС - это ладно, ошибиться нубу немудрено.
Но данные исходные и желаемые-то он должен
правильно привести хотя бы.


я вроде объяснил почему такая сумма вышла. Перепроверил, цифры правильный
12 сен 17, 10:41    [20789175]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
sidiscom
Member

Откуда:
Сообщений: 115
Гаджимурадов Рустам
sidiscom
(01.09.2017 - 02.09.2017 для магазина P1)
dat si sd sk sv kfr
01.09.2017 30 10 0 0 A1

dat sd sk kfr
01.09.2017 20 0 A2

В этот день была еще одна проводка на кассе А2 на сумму 20 руб. Общий итог для магазина Р1 у которого кассы (А1 и А2) будет 30 руб


Чушь какая-то... ОК, допустим, что это нарастающий итог
по магазину, типа OVER и к кассе в строках не относится.
Тогда что со следующими двумя строками:

BAL
(таблица сальдо кассы, заполняется процедурой на основании документа OPA)
kfrdatsisdsk
A202.09.20175015


необходимо вывести операции за период с входящим и исходящим остатком магазина
(01.09.2017 - 02.09.2017 для магазина P1)
datsisdsksvkfr
02.09.20171501530A2




В кассе А2 была операция покупки на 20 рублей (01.09.2017) и продажа на 15 рублей (02.09.2017)
datsdskkfr
01.09.2017200A2
02.09.2017015A2


В таблице BAL (итоги формируются: исходящий остаток, сумма дебета и сумма кредита ) в разрезе даты и кассы
kfrdatsisdsk
A201.09.201720200
A202.09.20175015

итог на вечер 02.09.2017 остаток в кассе А2 = 5 рублей

а по магазину итог это как исходящий остаток кассы А1 + А2
остаток А1 = 10 руб (на 01.09.2017) так как 02.09.2017 операций не было то и на 02.09.2017 остаток равен 10 руб
Итого исходящий остаток в магазине Р1 = 10+5 = 15
а так как
необходимо вывести операции за период с входящим и исходящим остатком магазина (не кассы)
(01.09.2017 - 02.09.2017 для магазина P1)
datsisdsksvkfr
02.09.20171501530A2
[/quot]

т.е. OPA для операции
datsdskkfr
02.09.2017015A2

добавив столбец исходящего остатка магазина и входящего остатка магазина, получим
datsdskkfrsisv
02.09.2017015A21530
12 сен 17, 10:59    [20789215]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 247
sidiscom,

А может быть в таблице OPA сто записей для одной даты и одной кассы?
12 сен 17, 12:19    [20789488]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
sidiscom
Member

Откуда:
Сообщений: 115
Да, может (это операции в течении дня)
13 сен 17, 08:38    [20791755]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 247
sidiscom,

А в Вашем последненаписанном запросе никакого суммирования по OPA нет. В переводе - Ваш запрос не удовлетворяет Вашим же требованиям.
13 сен 17, 10:32    [20792054]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
sidiscom
Member

Откуда:
Сообщений: 115
KreatorXXI
sidiscom,

А в Вашем последненаписанном запросе никакого суммирования по OPA нет. В переводе - Ваш запрос не удовлетворяет Вашим же требованиям.


мне суммирование по OPA не нужно, так как обороты по дебету и кредиту вычисляются в BAL
13 сен 17, 10:43    [20792099]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
sidiscom
Member

Откуда:
Сообщений: 115
Добрый день
Всем большое спасибо, что помогли советами
остановился на таком решении:
SELECT o.dat,o.sd,o.sk,
(SELECT sum(b.si) FROM bal b ......) as si,
(SELECT (sum(b.si)-sum(b.sd)+sum(b.sk)) FROM bal b .....) as sv
FROM opa o
JOIN kfr k ON k.kfr=o.kfr 
WHERE 
k.pps = ''
AND 
o.dat between "" and ""


Тему можно закрывать
22 сен 17, 13:31    [20815683]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3      [все]
Все форумы / Firebird, InterBase Ответить