объединять таблицы и столбцы SUM для каждой отдельной строки, причем некоторые строки считаются столбцами - PullRequest
1 голос
/ 30 декабря 2010

У меня есть две таблицы как

table1

id1  | total_amount| final_amount| p_id
---------------------------------------
1    |  500        |    505      |  10
2    |  700        |    710      |  20
3    |  400        |    400      |  10
4    |  450        |    460      |  20
5    |  300        |    300      |  10

table2

id2    | month  | amount | id1
------------------------------
1      |  jan   |  300   |  1
2      |  feb   |  200   |  1
3      |  jan   |  200   |  2
4      |  feb   |  500   |  2
5      |  feb   |  400   |  3
6      |  jan   |  150   |  4
7      |  feb   |  300   |  4
8      |  jan   |  300   |  5

здесь значение столбца tatal_amount представляет собой сумму (сумму) по условию как id1, в то время как final_amount получает от total_amount + (некоторое фиктивное значение)

, поэтому результат, полученный из этих таблиц, будет таким, как показано ниже ..

id3 | p_id  | jan | feb | total
-------------------------------
1   |  10   | 600 | 600 | 1205
2   |  20   | 350 | 800 | 1170

здесь значение в столбцах jan, feb - это сумма суммы в table2, в то время как значение в столбце total - это сумма final_amount в table1, и все они сгруппированы по p_id, так что это запрос для вывода выше.если вы знаете, пожалуйста, ответьте ......

1 Ответ

0 голосов
/ 30 декабря 2010

Вы не указали СУБД.

В SQL Server работает следующее

WITH table1(id1, total_amount, final_amount, p_id)
     AS (SELECT 1,500,505,10 UNION ALL
         SELECT 2,700,710,20 UNION ALL
         SELECT 3,400,400,10 UNION ALL
         SELECT 4,450,460,20 UNION ALL
         SELECT 5,300,300,10),
     table2(id2, month, amount, id1)
     AS (SELECT 1,'jan',300,1 UNION ALL
         SELECT 2,'feb',200,1 UNION ALL
         SELECT 3,'jan',200,2 UNION ALL
         SELECT 4,'feb',500,2 UNION ALL
         SELECT 5,'feb',400,3 UNION ALL
         SELECT 6,'jan',150,4 UNION ALL
         SELECT 7,'feb',300,4 UNION ALL
         SELECT 8,'jan',300,5),
     t1
     AS (SELECT p_id,SUM(final_amount) AS total_amount
         FROM   table1
         GROUP  BY p_id),
     t2
     AS (SELECT p_id,
                SUM(CASE WHEN month = 'jan' THEN amount END) AS jan,
                SUM(CASE WHEN month = 'feb' THEN amount END) AS feb
         FROM   table2
                JOIN table1
                  ON table1.id1 = table2.id1
         GROUP  BY p_id)
SELECT Row_number() OVER (ORDER BY (SELECT 0)) AS id3,t1.p_id,jan,feb,
       total_amount
FROM   t1
       JOIN t2
         ON t1.p_id = t2.p_id 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...