C# 使用distinct左连接并计算列值
我有两个类似的表,我想加入它们并得到如下所示的结果 表1C# 使用distinct左连接并计算列值,c#,sql,group-by,db2,left-join,C#,Sql,Group By,Db2,Left Join,我有两个类似的表,我想加入它们并得到如下所示的结果 表1 JobNO | JobMovRefNo --------------------------------- 123 | 1 456 | 1 789 | 1 表2 JobNO | Arrived --------------------------------- 123 | y 123 | y 123
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的左连接,但得到了重复记录。非常感谢您的帮助
提前感谢。使用
左联接
并在联接前聚合
select *
from table1 t1 left join
(select jobno, min(arrived) as arrived
from table2 t2
group by jobno
) t2
using (jobno);
您还没有解释您的逻辑,但是您似乎希望每行的arrived
的最小值,这就是它的作用
编辑:
非常旧的DB2版本不支持使用。这也可以写成:
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;
执行左连接
,分组方式
。使用coalesce
为表2中不存在的作业编号获取“n”
select t1.jobno, coalesce(min(t2.arrived), 'n')
from table1 t1
left join table2 t2 on t1.jobno = t2.jobno
group by t1.jobno
这是我的解决方案。
我用了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
group by jobno
@GORDON-谢谢你的回答。我很快尝试了这个方法,顺便说一句,我正在使用DB2,我得到了一个错误列或全局变量t2 notfound@Abe . . . 我修正了你问题上的标签。@GordonLinoff-再次感谢,我得到了数据,但789号工作单的数据为空。我希望它是一个“n”。有什么想法吗?@PaulVernon。我要说的是,我花了一些精力寻找合适的文档,但很难找到。我修正了答案。不太清楚背后的逻辑是什么。到达时应显示最后状态吗?