我有两张桌子
的表1 的
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
的表2 的
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 column中的值是table1中final_amount的总和,并且所有列都是p_id的组 那么什么是上面输出的查询。 如果你知道那么请回复......
答案 0 :(得分:0)
您没有声明RDBMS。
以下适用于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