Мне нужна помощь для этого кода. Что я сделал не так. Я хочу получить результат, который дает мне группу по количеству базовых столбцов Commercial, Residential and Agriculture в текущей и предыдущей колонках revepiod. Как выполнить с этим кодом или лучше любое предложение об этом. Заранее спасибо.
SELECT (CASE (c.classcode)
WHEN 'C' THEN 'COMMERCIAL'
WHEN 'R' THEN 'RESIDENTIAL'
WHEN 'A' THEN 'AGRICULTURE' END) AS CLASSIFICATION,
( SELECT SUM(a.basic)
FROM cashreceiptitem_rpt_online a
JOIN cashreceipt_rpt b ON a.rptreceiptid=b.objid
JOIN rptledger c ON a.rptledgerid=c.objid
WHERE b.month='11'
AND a.revperiod='current'
) AS BC,
( SELECT SUM(a.basic)
FROM cashreceiptitem_rpt_online a
JOIN cashreceipt_rpt b ON a.rptreceiptid=b.objid
JOIN rptledger c ON a.rptledgerid=c.objid
WHERE b.month='11'
AND a.revperiod='previous'
) AS BPC
FROM cashreceiptitem_rpt_online a
JOIN cashreceipt_rpt b ON a.rptreceiptid=b.objid
JOIN rptledger c ON a.rptledgerid=c.objid
WHERE b.month='11'
У меня есть эта ошибка Error Code: 1242; Subquery returns more than 1 row.
Error Code: 1242; Subquery returns more than 1 row.
Не уверен в структуре таблиц, но вы можете сделать что-то вроде этого:
SELECT c.classcode, SUM(a.basic), SUM(aprev.basic)
FROM cashreceiptitem_rpt_online a
JOIN cashreceiptitem_rpt_online aprev
ON a.rptreceiptid = aprev.rptreceiptid
JOIN cashreceipt_rpt b ON a.rptreceiptid=b.objid
JOIN cashreceipt_rpt bprev ON a.rptreceiptid=bprev.objid
JOIN rptledger c ON a.rptledgerid=c.objid
WHERE b.month='11' AND bprev.month='11'
AND a.revperiod='current' AND aprev.revperiod = 'previous'
GROUP BY c.classcode;
Вам нужно будет найти подходящие соединения для основных ключей таблицы.
GROUP BY
для получения сумм, а не использовать подзапросы для каждого типа. Дайте мне знать, если вам нужна помощь, используя его.