Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 具有某些行的每个不同行的联接表和求和列被视为列_Sql_Sql Server - Fatal编程技术网

Sql 具有某些行的每个不同行的联接表和求和列被视为列

Sql 具有某些行的每个不同行的联接表和求和列被视为列,sql,sql-server,Sql,Sql Server,我有两张桌子 表1 表2 此处,tatal_amount列的值是按id1条件计算的总和(金额) 而最终金额是从总金额+(一些虚拟值)中获取的 因此,从这些表中得到的结果如下 id3 | p_id | jan | feb | total ------------------------------- 1 | 10 | 600 | 600 | 1205 2 | 20 | 350 | 800 | 1170 在这里,一月、二月列中的值是表2中金额的总和,而总计列中的值是表1中最终

我有两张桌子

表1

表2

此处,tatal_amount列的值是按id1条件计算的总和(金额) 而最终金额是从总金额+(一些虚拟值)中获取的

因此,从这些表中得到的结果如下

id3 | p_id  | jan | feb | total
-------------------------------
1   |  10   | 600 | 600 | 1205
2   |  20   | 350 | 800 | 1170
在这里,一月、二月列中的值是表2中金额的总和,而总计列中的值是表1中最终金额的总和,所有这些都是按p_id分组的 那么,对上述输出的查询是什么呢。 如果你知道,请回复

您不需要说明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 

是的,显然它需要数据透视法,但它需要更多的数据透视法来显示表1中最终金额的总和,这些都是按p_IDA分组的,因为我尝试了一个查询,作为SELECT t1.p_id,sum(当t2.month='jan'然后t2.quantity否则NULL END时的情况)作为“jan”,sum(当t2.month='feb'时,则t2.quantity否则为空结束)为“feb”,总和(t1.最终金额)为“总计”从表t1将t1.id1=t2.id1 GROUP BY t1.p_id上的表t2连接到t1.id1上,但它在总列中显示了错误的值Hi Martin,ref:您的回答是关于我的问题的查询,关于连接表和每个不同行的总和列以及一些行被视为列。问题:此查询不在postgresql中运行。因为它们是用于查询的任何语法如果是,请在postgresql中运行。答复查询。谢谢
id3 | p_id  | jan | feb | total
-------------------------------
1   |  10   | 600 | 600 | 1205
2   |  20   | 350 | 800 | 1170
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