如何在SQL中的2列数据之间求和

时间:2018-07-25 10:07:43

标签: sql

作为标题,我想对2列数据求和,并在另一列中显示结果。下面是一个示例,请注意。谢谢。

这是我的数据

SELECT
ES.SHPMNT_REF AS "File No",

    (SELECT MAX(EXPORT_SHIPPING_ORDERS.EXTRA_20_CONTAINERS) FROM EXPORT_SHIPPING_ORDERS WHERE
    EXPORT_SHIPPING_ORDERS.SHPMNT_REF = ES.SHPMNT_REF) AS "20'",

    (SELECT MAX(EXPORT_SHIPPING_ORDERS.EXTRA_40_CONTAINERS) FROM EXPORT_SHIPPING_ORDERS WHERE
    EXPORT_SHIPPING_ORDERS.SHPMNT_REF = ES.SHPMNT_REF) AS "40'"

FROM BRDB.EXPORT_SHIPMENT ES 

表就像:

File No    20'     40'
 000123     3       4
 000124     1       2

我想要的是:

File No    20'     40'     Total
 000123     3       4        7
 000124     1       2        3

“总计”不在数据库列中,它是虚拟列。

5 个答案:

答案 0 :(得分:0)

with data as 
(SELECT
ES.SHPMNT_REF AS "File No",

    (SELECT MAX(EXPORT_SHIPPING_ORDERS.EXTRA_20_CONTAINERS) FROM EXPORT_SHIPPING_ORDERS WHERE
    EXPORT_SHIPPING_ORDERS.SHPMNT_REF = ES.SHPMNT_REF) AS "20'",

    (SELECT MAX(EXPORT_SHIPPING_ORDERS.EXTRA_40_CONTAINERS) FROM EXPORT_SHIPPING_ORDERS WHERE
    EXPORT_SHIPPING_ORDERS.SHPMNT_REF = ES.SHPMNT_REF) AS "40'"

FROM BRDB.EXPORT_SHIPMENT ES)
select "File No", "20'", "40'", "20'" + "40'" as "Total"
from data;

编辑:如果您的后端不支持“ with CTE”:

select "File No", "20'", "40'", "20'" + "40'" as "Total"
from (SELECT
ES.SHPMNT_REF AS "File No",

    (SELECT MAX(EXPORT_SHIPPING_ORDERS.EXTRA_20_CONTAINERS) FROM EXPORT_SHIPPING_ORDERS WHERE
    EXPORT_SHIPPING_ORDERS.SHPMNT_REF = ES.SHPMNT_REF) AS "20'",

    (SELECT MAX(EXPORT_SHIPPING_ORDERS.EXTRA_40_CONTAINERS) FROM EXPORT_SHIPPING_ORDERS WHERE
    EXPORT_SHIPPING_ORDERS.SHPMNT_REF = ES.SHPMNT_REF) AS "40'"

FROM BRDB.EXPORT_SHIPMENT ES) data;

答案 1 :(得分:0)

使用CTE

with cte as
(SELECT
ES.SHPMNT_REF AS "File No",

(SELECT MAX(EXPORT_SHIPPING_ORDERS.EXTRA_20_CONTAINERS) FROM EXPORT_SHIPPING_ORDERS WHERE
EXPORT_SHIPPING_ORDERS.SHPMNT_REF = ES.SHPMNT_REF) AS "20'",

(SELECT MAX(EXPORT_SHIPPING_ORDERS.EXTRA_40_CONTAINERS) FROM EXPORT_SHIPPING_ORDERS WHERE
EXPORT_SHIPPING_ORDERS.SHPMNT_REF = ES.SHPMNT_REF) AS "40'"

FROM BRDB.EXPORT_SHIPMENT ES )
Select *, [20'] + [40'] as "Total" from cte

答案 2 :(得分:0)

只需使用+

SELECT
ES.SHPMNT_REF AS "File No",

    (SELECT MAX(EXPORT_SHIPPING_ORDERS.EXTRA_20_CONTAINERS) FROM EXPORT_SHIPPING_ORDERS WHERE
    EXPORT_SHIPPING_ORDERS.SHPMNT_REF = ES.SHPMNT_REF) AS "20'",

    (SELECT MAX(EXPORT_SHIPPING_ORDERS.EXTRA_40_CONTAINERS) FROM EXPORT_SHIPPING_ORDERS WHERE
    EXPORT_SHIPPING_ORDERS.SHPMNT_REF = ES.SHPMNT_REF) AS "40'",

    (SELECT MAX(EXPORT_SHIPPING_ORDERS.EXTRA_20_CONTAINERS) FROM EXPORT_SHIPPING_ORDERS WHERE
    EXPORT_SHIPPING_ORDERS.SHPMNT_REF = ES.SHPMNT_REF)
    +
    (SELECT MAX(EXPORT_SHIPPING_ORDERS.EXTRA_40_CONTAINERS) FROM EXPORT_SHIPPING_ORDERS WHERE
    EXPORT_SHIPPING_ORDERS.SHPMNT_REF = ES.SHPMNT_REF) AS "Total"
FROM BRDB.EXPORT_SHIPMENT ES;

答案 3 :(得分:0)

使用+添加两个值。为了方便起见,将聚合查询移至FROM子句(如果您更喜欢,则移至WITH子句)。

select
  es.shpmnt_ref,
  coalesce(eso.extra20, 0) as ex20,
  coalesce(eso.extra40, 0) as ex40,
  coalesce(eso.extra20, 0) + coalesce(eso.extra40, 0) as total
from brdb.export_shipment es
left join
(
  select
    shpmnt_ref,
    max(extra_20_containers) as extra20,
    max(extra_40_containers) as extra40
  from export_shipping_orders
  group by shpmnt_ref
) eso on eso.shpmnt_ref = es.shpmnt_ref;

答案 4 :(得分:0)

您只需使用'+'运算符即可

SELECT
ES.SHPMNT_REF AS "File No",

(SELECT MAX(EXPORT_SHIPPING_ORDERS.EXTRA_20_CONTAINERS) FROM EXPORT_SHIPPING_ORDERS 
WHERE EXPORT_SHIPPING_ORDERS.SHPMNT_REF = ES.SHPMNT_REF) AS "20'",

(SELECT MAX(EXPORT_SHIPPING_ORDERS.EXTRA_40_CONTAINERS) FROM EXPORT_SHIPPING_ORDERS 
WHERE EXPORT_SHIPPING_ORDERS.SHPMNT_REF = ES.SHPMNT_REF) AS "40'"

((SELECT MAX(EXPORT_SHIPPING_ORDERS.EXTRA_20_CONTAINERS) FROM EXPORT_SHIPPING_ORDERS 
WHERE EXPORT_SHIPPING_ORDERS.SHPMNT_REF = ES.SHPMNT_REF)
+ 
(SELECT MAX(EXPORT_SHIPPING_ORDERS.EXTRA_40_CONTAINERS) FROM EXPORT_SHIPPING_ORDERS 
WHERE EXPORT_SHIPPING_ORDERS.SHPMNT_REF = ES.SHPMNT_REF)) AS "Total"

FROM BRDB.EXPORT_SHIPMENT ES