запрос, чтобы получить сумму - PullRequest
0 голосов
/ 17 апреля 2020

Предположим, у меня есть данные

code_table

code_id | code_no | stats |
2         60         22A3
3         60         22A3

value_table

value_no | amount_value_one | amount_value_two | amount_diff | code_no |  sample_no  | code_id
1          1200.00             400.00             800.00        60         90          2
1           600.00             200.00             400.00        60        100          3
1          1800.00             600.00            1200.00        60        110          2
2          1200.00            1200.00               0.00        60        110          2
2           800.00             600.00             200.00        60         90          2
2           400.00               0.00             400.00        60        100          3

Что я хочу случиться - это получить всю СУММУ amount_value_two и просто сохранить first amount_value_one, который имеет value_no = 1

, вывод которого можно сделать следующим образом:

amount_value_one | SUM_of_amount_value_two | amount_diff | sample_no
1200.00             1000.00                     200.00         90
 600.00              200.00                     400.00         100 
1800.00            1.800.00                       0.00         110

пока у меня есть следующий запрос

SELECT SUM(p.amount_value_one) as value_one,
SUM(p.amount_value_two) as value_two,
SUM(p.amount_diff) as amount_diff,
p.sample_no as sampleNo FROM value_table p
INNER JOIN code_table On code_table.code_no = p.code_no
WHERE code_table.code_id = p.code_id
AND code_table.stats = '22A3'
GROUP BY p.sample_no

приведенный выше запрос неверен, поскольку он получает сумму как p.amount_value_one и p.amount_diff

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

1 Ответ

1 голос
/ 17 апреля 2020

Предполагая, что у вас есть столбец, в котором указывается порядок, вы можете использовать его для определения «первой» строки. Тогда используйте условное агрегирование:

SELECT SUM(CASE WHEN seqnum = 1 THEN p.amount_value_one END) as value_one,
       SUM(p.amount_value_two) as value_two,
       SUM(p.amount_diff) as amount_diff,
       p.sample_no as sampleNo
FROM (SELECT p.*,
             ROW_NUMBER() OVER (PARTITION BY p.sample_no ORDER BY <ordering column>) as seqnum
      FROM value_table p
     ) p JOIN
     code_table  ct
     ON ct.code_no = p.code_no AND
        ct.code_id = p.code_id
WHERE ct.stats = '22A3'
GROUP BY p.sample_no
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...