【问题标题】:Left join with distinct and calculate column value左连接不同并计算列值
【发布时间】:2020-10-08 13:50:57
【问题描述】:

我有两个表,我想加入并得到如下所示的结果

表 1

JobNO       |       JobMovRefNo
---------------------------------
123         |   1
456         |   1
789         |   1

表 2

JobNO       |   Arrived
---------------------------------
123         |   y
123         |   y
123         |   n
456         |   y
456         |   y

结果表

JobNO       |   Arrived
---------------------------------
123         |   n
456         |   y
789         |   n

我尝试使用 group by 进行左连接,但我得到了重复的记录。非常感谢任何帮助。

提前致谢。

【问题讨论】:

  • 背后的逻辑不是很清楚。到货应该显示最后状态吗?

标签: c# sql group-by db2 left-join


【解决方案1】:

使用left join 并在加入前聚合

select *
from table1 t1 left join
     (select jobno, min(arrived) as arrived
      from table2 t2
      group by jobno
     ) t2
     using (jobno);

您尚未解释您的逻辑,但您似乎希望每一行的最小值为 arrived,这就是这样做的。

编辑:

非常旧的 DB2 版本不支持USING。这也可以写成:

select t1.*, coalesce(t2.arrived, 'n') as arrived
from table1 t1 left join
     (select jobno, min(arrived) as arrived
      from table2 t2
      group by jobno
     ) t2
     on t2.jobno = t1.jobno;

【讨论】:

  • group by jobno
  • @GORDON - 感谢您的回答。我很快尝试了这个,顺便说一下,我正在使用 DB2,但我得到一个错误'column or global variable t2 not found
  • @Abe 。 . .我修复了你问题上的标签。
  • @GordonLinoff - 再次感谢,我正在获取数据,但是对于 jobno 789 有一些空值。我希望它是一个“n”。有什么想法吗?
  • @PaulVernon 。 . .我会说我花了一些精力寻找合适的文档,但并不容易找到。我确定了答案。
【解决方案2】:

这是我的解决方案。 我使用了postgreSQL;希望它适用于您的 dbms。

select 
    t1.jobno,
    min(CASE WHEN t2.arrived IS NULL THEN 'n' ELSE t2.arrived END) as arrived
from table1 t1 left join table2 t2 on t1.jobno = t2.jobno  
group by t1.jobno
order by t1.jobno 

【讨论】:

    【解决方案3】:

    做一个LEFT JOINGROUP BY。使用 coalesce 获取 'n' 表 2 中不存在的 jobno。

    select t1.jobno, coalesce(min(t2.arrived), 'n')
    from table1 t1
    left join table2 t2 on t1.jobno = t2.jobno
    group by t1.jobno
    

    【讨论】:

      猜你喜欢
      • 2021-08-30
      • 2016-06-17
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      • 2021-03-29
      • 2014-04-29
      • 1970-01-01
      • 2013-12-05
      相关资源
      最近更新 更多