Как заполнить данные в столбце только для первой строки в запросе SQL - PullRequest
0 голосов
/ 28 апреля 2019

Я должен написать запрос, как показано ниже, но он должен давать данные, заполненные только для первой строки в выборочном столбце.Значение столбца во второй по последнюю строку должно быть пустым.Но другое значение столбца должно присутствовать.

SELECT CLAIMID as "Claim Id", PAID_IN_INSTALMENTS as "Instalments", 
       F_CALCULATE_TOTAL_PAID(CLAIMID) as "Total Amount Paid"
  FROM PT_CLAIMS WHERE CLAIMID = '123456'

В этом запросе столбец «Общая выплаченная сумма» должен быть заполнен только для первой строки.Пожалуйста, обратите внимание, что я не могу изменить функцию F_CALCULATE_TOTAL_PAID.Вывод должен быть таким, как показано ниже:

Claim Id   |  Instalments   |   Total Amount Paid
-----------|----------------|---------------------
123456     |   500.00       |     1800.00
-----------|----------------|---------------------
123456     |   300.00       |                     
-----------|----------------|---------------------
123456     |   600.00       |                     
-----------|----------------|---------------------
123456     |   400.00       |                     

1 Ответ

0 голосов
/ 28 апреля 2019

Таблица SQL представляет неупорядоченные наборы.Нет такой вещи, как «первая строка», если только в столбце не указан порядок.

Позвольте мне предположить, что у вас есть такой столбец.В этом случае вы можете использовать оконные функции:

SELECT CLAIMID as "Claim Id",
       PAID_IN_INSTALMENTS as "Instalments", 
       (CASE WHEN 1 = ROW_NUMBER() OVER (PARTITION BY CLIAMID ORDER BY <ordering column>)
             THEN SUM(PAID_IN_INSTALMENTS) OVER ()
        END)  as "Total Amount Paid",
FROM PT_CLAIMS
WHERE CLAIMID = '123456'
ORDER BY <ordering column>;

Это не использует функцию F_CALCULATE_TOTAL_PAID(CLAIMID), потому что, кажется, это просто общая сумма PAID_IN_INSTALMENTS и есть встроенная функция длясделай это.Если в этой функции больше логики, вы можете, конечно, использовать ее вместо оконной функции:

       (CASE WHEN 1 = ROW_NUMBER() OVER (PARTITION BY CLIAMID ORDER BY <ordering column>)
             THEN `F_CALCULATE_TOTAL_PAID(CLAIMID)
        END)  as "Total Amount Paid",
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...