1 (edited by ZBear 2017-10-23 10:53:53)

Topic: SQL отчет

В программе формируется SQL отчет:

SELECT DISTINCT
dogovor.nomer AS `dogovor.nomer`,
dogovor.data AS `dogovor.data`,
(SELECT kontr.name FROM kontr WHERE kontr.id=dogovor.id_kontr) AS 'dogovor.kontr',
(SELECT rashod.vid FROM rashod LEFT OUTER JOIN statya ON statya.id_rashod=rashod.id WHERE statya.id=dogovor.id_statya ) AS 'dogovor.stat',
(SELECT statya.st FROM statya WHERE statya.id=dogovor.id_statya ) AS 'dogovor.stat_calc',
(SELECT user.user FROM user WHERE user.id=dogovor.id_user) AS 'dogovor.user_calc',
buh_doc.vid AS `buh_doc.vid`,
buh_doc.nomer AS `buh_doc.nomer`,
buh_doc.data AS `buh_doc.data`,                                                         
buh_doc.summa AS `buh_doc.summa`,
buh_doc.datapay AS `buh_doc.datapay`,
buh_doc.pay AS `buh_doc.pay`,
currency.curr AS `currency.curr`,
dogovor.usl_opl AS `dogovor.usl_opl`,
(SELECT block.block FROM block WHERE buh_doc.id_block=block.id)  AS `block.block`,


(SELECT SUM(summa)  FROM buh_doc
WHERE buh_doc.datapay={MonthCalendar1} AND block.block="В" AND buh_doc.pay="НЕТ") AS 'buh_doc.datapayB', 
   
(SELECT SUM(summa)  FROM buh_doc
WHERE buh_doc.datapay={MonthCalendar1} AND block.block="Н" AND buh_doc.pay="НЕТ") AS 'buh_doc.datapayH',               
   
(SELECT SUM(summa)  FROM buh_doc
WHERE buh_doc.datapay={MonthCalendar1} AND block.block="А" AND buh_doc.pay="НЕТ") AS 'buh_doc.datapayA'
                                                                           
FROM buh_doc
LEFT OUTER JOIN dogovor ON buh_doc.id_dogovor=dogovor.id                     
LEFT OUTER JOIN block ON buh_doc.id_block=block.id
LEFT OUTER JOIN currency ON buh_doc.id_currency=currency.id

WHERE buh_doc.datapay={MonthCalendar1} AND buh_doc.pay="НЕТ"         


Не работают строки:

(SELECT SUM(summa)  FROM buh_doc
WHERE buh_doc.datapay={MonthCalendar1} AND block.block="В" AND buh_doc.pay="НЕТ") AS 'buh_doc.datapayB', 
   
(SELECT SUM(summa)  FROM buh_doc
WHERE buh_doc.datapay={MonthCalendar1} AND block.block="Н" AND buh_doc.pay="НЕТ") AS 'buh_doc.datapayH',               
   
(SELECT SUM(summa)  FROM buh_doc
WHERE buh_doc.datapay={MonthCalendar1} AND block.block="А" AND buh_doc.pay="НЕТ") AS 'buh_doc.datapayA'

Поправьте меня, что я делаю не так.

Re: SQL отчет

Пожалуйста приложите ваш проект.

Dmitry.

Re: SQL отчет

Проект на MySQL. Пароль на вход -  %

Post's attachments

Attachment icon Dogovor edit.rar 51.4 kb, 350 downloads since 2017-10-24 

Re: SQL отчет

вкладка "К оплате -> на неделю -> выбрать дату на календаре, Button7 (шаблон platezh_week)

Re: SQL отчет

вместо

buh_doc.pay="НЕТ"

должно быть так

buh_doc.pay=0

Поле с типом ДА/НЕТ может иметь два состояния, 1 - Да и 0 - нет

Dmitry.

Re: SQL отчет

Условие buh_doc.pay работает в вариантах 0 и "Нет". А вот  условие block.block= не работает. Только строка

(SELECT SUM(summa)  FROM buh_doc
WHERE buh_doc.datapay={MonthCalendar1} AND block.block="А" AND buh_doc.pay="НЕТ") AS 'buh_doc.datapayA'

работает, но выдает общую сумму а не сумму блока А как задумывалось. От переноса очередности строк ничего не зависит

Re: SQL отчет

sql запрос составлен неверно.
таблицы buh_doc и block не связаны между собой в данном запросе, необходимо использовать JOIN

Dmitry.

8 (edited by ZBear 2017-10-26 12:21:18)

Re: SQL отчет

Используется

FROM buh_doc
LEFT OUTER JOIN dogovor ON buh_doc.id_dogovor=dogovor.id                     
LEFT OUTER JOIN block ON buh_doc.id_block=block.id
LEFT OUTER JOIN currency ON buh_doc.id_currency=currency.id

WHERE buh_doc.datapay={MonthCalendar1} AND buh_doc.pay="0"       

?

Re: SQL отчет

в подзапросе не используется.

Dmitry.

Re: SQL отчет

Спасибо, разобрался

11 (edited by ZBear 2017-10-30 04:16:42)

Re: SQL отчет

Ещё вопрос - как мне связать таблицы через одну? Значение я получаю через вычислительное поле:

(SELECT user.user FROM user WHERE user.id=dogovor.id_user) AS 'dogovor.user_calc',

основная таблица с которой формирую отчет напрямую связана только с таблицей dogovor

LEFT OUTER JOIN dogovor ON buh_doc.id_dogovor=dogovor.id   

но мне необходимо сделать окончательную фильтрацию по полю user.user примерно так:

WHERE buh_doc.datapay={MonthCalendar1} AND buh_doc.pay=0 AND user.user = {Edit5}

Как мне прописать LEFT OUTER JOIN ?

Re: SQL отчет

Вопрос закрыт. Разобрался