【问题标题】:How to combine null values and varchar values in SQL?如何在 SQL 中组合 null 值和 varchar 值?
【发布时间】:2021-11-15 00:33:33
【问题描述】:

我正在处理一个特别烦人的数据集。我刚刚设法让数据与预期一致,但现在我在合并/组合一些行时遇到了麻烦,以便我有一个更整洁的表格。为了帮助您理解我得到的信息是这样的:

order_id aso_flag dpo_flag tcv ops penalty_charge
4540 N Y 1.7 0 0
4540 1.4 0

这就是我想要的:

order_id aso_flag dpo_flag tcv ops penalty_charge
4540 N Y 1.7 1.4 0

这是我当前查询的底部:

SELECT  
order_id
,NULL AS aso_flag
,dpo_flag
,tcv
,0 AS ops
,0 AS penalty_charge

FROM CO

UNION ALL

SELECT 
order_id
,aso_flag
,null AS dpo_flag
,0 AS tcv
,ops
,penalty_charge

FROM OPS  

使用的初始表不完全相互镜像(缺少 order_ids),并且对它们进行完全连接似乎非常非常慢。任何建议将不胜感激!

【问题讨论】:

  • 看起来你需要在 order_id 上添加一个约束,这样你才能有效地加入。
  • 使用group by 然后max

标签: sql amazon-redshift


【解决方案1】:

从您的Union 然后group bymax 派生表

SELECT
  order_id,
  MAX(aso_flag) aso_flag,
  MAX(dpo_flag) dpo_flag,
  MAX(tcv) tcv,
  MAX(ops) ops,
  MAX(penalty_charge) penalty_charge
FROM (SELECT
  order_id,
  NULL AS aso_flag,
  dpo_flag,
  tcv,
  0 AS ops,
  0 AS penalty_charge

FROM CO

UNION ALL

SELECT
  order_id,
  aso_flag,
  NULL AS dpo_flag,
  0 AS tcv,
  ops,
  penalty_charge

FROM OPS) x
GROUP BY order_id

【讨论】:

  • 成功了!谢谢!
猜你喜欢
  • 2020-12-17
  • 1970-01-01
  • 2012-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多