Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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_Oracle - Fatal编程技术网

Sql 将两个不同表中的总和相加

Sql 将两个不同表中的总和相加,sql,oracle,Sql,Oracle,我怎样才能做到这一点。T2与另一个表链接,该表包含客户名称、国家/地区和分类等订单详细信息。它们有一个内部连接 T1仅通过订单代码和订单项链接到T2 假设两个表报告相同的订单号集,我们可以尝试连接两个子查询,每个子查询在各自的表中查找总和: SELECT t1.ORDER_NUM, t1.ORDER_ITEM, t1.PRODUCED + t2.PRODUCED AS PRODUCED FROM ( SELECT ORDER_NUM, ORDER_ITEM, SU

我怎样才能做到这一点。T2与另一个表链接,该表包含客户名称、国家/地区和分类等订单详细信息。它们有一个内部连接

T1仅通过订单代码和订单项链接到T2


假设两个表报告相同的订单号集,我们可以尝试连接两个子查询,每个子查询在各自的表中查找总和:

SELECT
    t1.ORDER_NUM,
    t1.ORDER_ITEM,
    t1.PRODUCED + t2.PRODUCED AS PRODUCED
FROM
(
    SELECT ORDER_NUM, ORDER_ITEM, SUM(PRODUCED) AS PRODUCED
    FROM table1
    GROUP BY ORDER_NUM
) t1
INNER JOIN
(
    SELECT ORDER_NUM, ORDER_ITEM, SUM(NET_IN - NET_OUT) AS PRODUCED
    FROM table2
    GROUP BY ORDER_NUM
) t2
    ON t1.ORDER_NUM = t2.ORDER_NUM AND
       t1.ORDER_ITEM = t2.ORDER_ITEM
ORDER BY
    t1.ORDER_NUM,
    t1.ORDER_ITEM;

请注意,上述方法不一定是理想的方法,因为一个表中的给定订单/项目组合可能不会出现在另一个表中。更好的方法是使用包含所有订单和项目的引用表开始查询。如果失败了,我们可以将上面的内容转换为完整的外部连接。

我认为一个简单的方法是
联合所有的内容。

select ordernum, orderitem, sum(produced) as produced
from ((select ordernum, orderitem, produced
       from table1
      ) union all
      (select ordernum, orderitem, netout
       from table2
      )
     ) t12
group by ordernum, orderitem;
与预聚合和使用
join
s相比,这有两个优点:

  • 它保留所有订单/项目对,即使是出现在一个表中的订单/项目对
  • 如果将
    where
    claus添加到外部查询中,SQL Server可能会将其“投影”到子查询中

  • 也可以尝试下面的查询

    select t1.order_num,t1.order_item,sum(t1.produced)+(select sum(net_in) from t2)-(select sum(t2.net_out) from t2)PRODUCED
    from t1 
    group by t1.order_num,t1.order_item
    

    如果您在使用select query时希望从另一个表中得到唯一的和,并对特定列进行求和。

    如果您提供我们链接到T2的其他表的详细信息,则会有所帮助。请不要将数据作为图像共享,而应使用文本。@BarbarosÖzhan此处的目的只是给出一个示例,如果是样本数据,那么肯定是文本。同样,在文本或图像中共享上述内容也没有任何区别。1.想要回答任何问题的人都需要在数据库中进行尝试,因此需要将样本数据和您的努力复制并粘贴到该数据库的介质中。当然,复制和粘贴文本数据会更容易。2.有些人可能因为防火墙之类的过滤而看不到图像。但在这个查询中,并没有使用net in列。