嗨,我有一个表,其中有4列,我需要这是'sell_currency','sell_currency','buy_currency'和'buy_currency'.currency列是varchar,而amount是数字,我想要实现的是通过其货币计算金额的总和,所以这是我用来得到结果的SQL:

  select
    sell_currency,
    sum(sell_amount) as sell_amount
    null as buy_currency
    null as buy_amount
  from table1
  group by
    sell_currency
  union
  select
    null as sell_currency,
    null as sell_amount,
    buy_currency,
    sum(buy_amount) as buy_amount
  from table1
  group by
    buy_currency

使用表1中的数据:

SELL_CURRENCY   SELL_AMOUNT BUY_CURRENCY    BUY_AMOUNT
A               123         D               1
B               234         E               2
B               345         D               3
A               222         (null)          0
C               4444        (null)          0

这是我从表中得到的结果:

SELL_CURRENCY   SELL_AMOUNT BUY_CURRENCY    BUY_AMOUNT
A               345         (null)          (null)
B               579         (null)          (null)
C               4444        (null)          (null)  
(null)          (null)      D               4
(null)          (null)      E               2

但是,我想删除这些null,并能够将行组合在一起,以实现如下所示的结果:

SELL_CURRENCY   SELL_AMOUNT BUY_CURRENCY    BUY_AMOUNT
A               345         D               4
B               579         E               2
C               4444        (null)          (null)  

我需要做什么才能达到这个结果?

为了了解更多信息,这4列也经常更新,因此在卖出和买入中可能有3或2种以上的独特货币.

推荐答案

你不想要unions ,而是加入.

select currency, s.sell_amount, b.buy_amount
from
(
  select sell_currency as currency, sum(sell_amount) as sell_amount
  from table1
  group by sell_currency
) s
full outer join
(
  select buy_currency as currency, sum(buy_amount) as buy_amount
  from table1
  group by buy_currency
 ) b using (currency)
 order by currency;

Sql相关问答推荐

Oracle SQL对列进行汇总并在列表底部显示总计

使用SQL/R循环查找邻居

为什么postgres中CURRENT_TIMESTAMP的日期与CURRENT_DATE不同?

Oracle SQL-将结果列在单行中

SQL:如何在表中同时使用GROUPING和CONDITION?

使用多个嵌套数组查询JSON数据

Pgsql-返回包含多行数据的行

合并分层表SQL中的第一个非空、变化的空位置

如何为缺少的类别添加行

在SQL查询中查找客户端的最短日期比较列和多行

SQL按组 Select 最小值,当值不存在时为Null

从每月生成的系列中生成每日汇率

如何将 START 和 END 日期之间的日期差异作为 SQL 中的单独列获取

SQL 查询是否返回列表中仅包含某些值而不包含其他值的行?

错误:postgresql 中缺少表评级的 FROM 子句条目

将一名成员金额分配给群组内的其他成员

Clob 问题 - 将 clob 列拆分为多行

MS ACCESS 错误插入 X(...) 从 A 联合 Select ... 从 B

我需要遍历权重值表并确定每个权重是否有效

如何仅在满足条件时才按顺序在 SQL 中计数?