Обходной путь для подзапроса возвращает более 1 ошибки - PullRequest
1 голос
/ 28 октября 2019

Пожалуйста, помогите мне. Я создаю запрос для перечисления всех основных (SLE_CODE = 11) и процентных (SLE_CODE = 23) платежей, выполненных по ссуде клиента (поле REF_NO) в столбчатом виде.

Я пробовал этот код,но он возвращает ошибку «подзапрос возвращает более 1 строки».

SELECT DATE_FORMAT(TR_DATE, '%M %d, %Y'), SL_CLIENTID, REF_NO, SLE_CODE, (select amt from sldtl where REF_NO = 1958
AND SL_CLIENTID = 1782 AND SLC_CODE = 12 AND SLE_CODE = 23) as interest,
(select amt from sldtl sd where REF_NO = 1958
AND SL_CLIENTID = 1782 AND SLC_CODE = 12 AND SLE_CODE = 11) as principal
FROM sldtl
WHERE REF_NO = 1958
AND SL_CLIENTID = 1782 AND SLC_CODE = 12

Пожалуйста, обратитесь к этому sqlfiddle:

http://sqlfiddle.com/#!9/3ac32/2

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Вам нужно выражение case.. when:

SELECT DATE_FORMAT(TR_DATE, '%M %d, %Y'), 
       SL_CLIENTID, REF_NO, SLE_CODE,
       case when SLE_CODE = 23 then AMT else null end as interest,
       case when SLE_CODE = 11 then AMT else null end as principal
  FROM sldtl
 WHERE REF_NO = 1958
   AND SL_CLIENTID = 1782 
   AND SLC_CODE = 12;

Демо

0 голосов
/ 28 октября 2019

Примерные данные и желаемые результаты действительно помогут. Я уверен, что вы хотите условную агрегацию. Возможно это:

SELECT DATE_FORMAT(TR_DATE, '%M %d, %Y'),
       SL_CLIENTID, REF_NO,
       SUM(CASE WHEN SLE_CODE = 23 THEN amt END) as interest,
       SUM(CASE WHEN SLE_CODE = 11 THEN amt END) as principal
FROM sldtl
WHERE REF_NO = 1958 AND SL_CLIENTID = 1782 AND SLC_CODE = 12
GROUP BY DATE_FORMAT(TR_DATE, '%M %d, %Y'),
         SL_CLIENTID, REF_NO;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...