当前位置: 代码迷 >> Sql Server >> 两表间查询结果怎么过滤重复的记录?多谢
  详细解决方案

两表间查询结果怎么过滤重复的记录?多谢

热度:44   发布时间:2016-04-24 10:18:08.0
两表间查询结果如何过滤重复的记录?谢谢!
基本情况:表G是项目的详细信息,里面AutoID,ProID字段是主键,表J是项目的施工进度,定期向表J中插入施工的进度情况,主要是根据表G的ProID进行联系。
想要实现的目的:根据表G的ProID查看所有项目最新的进度,若有多条进度,只查看最新的,若没有任何进度,则只查看相关的项目信息。

表G表中有AutoID,ProID,ProName等字段,并且AutoID,ProID都是唯一的,表J里有XMFZRTianBaoShiJian和ProID,其中XMFZRTianBaoShiJian是唯一的,但ProID不是唯一的,这样以下语句查询出来就有可能存在多条XMFZRTianBaoShiJian不同但ProID相同的记录,如何只显示XMFZRTianBaoShiJian其中时间最新的记录呢?



SELECT G.AutoID AS 流水号,G.ProID AS 项目编号,G.ProName AS 项目名称, J.ProJingDu AS 项目进度,J.ProWenTi AS 存在问题,J.XMFZRTianBaoShiJian AS 进度填报时间  FROM G LEFT OUTER JOIN J ON G.proid=J.ProID ORDER BY AutoID

------解决方案--------------------
是这样吗:

SELECT  G.AutoID AS 流水号 ,
        G.ProID AS 项目编号 ,
        G.ProName AS 项目名称 ,
        J.ProJingDu AS 项目进度 ,
        J.ProWenTi AS 存在问题 ,
        max(J.XMFZRTianBaoShiJian) AS 进度填报时间
FROM    G
        LEFT OUTER JOIN J ON G.proid = J.ProID
group by G.AutoID AS 流水号 ,
        G.ProID AS 项目编号 ,
        G.ProName AS 项目名称 ,
        J.ProJingDu AS 项目进度 ,
        J.ProWenTi AS 存在问题 
ORDER BY AutoID

------解决方案--------------------
SELECT
 G.AutoID AS 流水号,G.ProID AS 项目编号,G.ProName AS 项目名称, J.ProJingDu AS 项目进度,J.ProWenTi AS 存在问题,J.XMFZRTianBaoShiJian AS 进度填报时间  
FROM
 G LEFT OUTER JOIN J ON G.proid=J.ProID 
WHERE NOT EXISTS(SELECT 1 FROM J AS J1 WHERE ProJingDu=J.ProJingDu AND ProWenTi=J.ProWenTi AND XMFZRTianBaoShiJian<J1.XMFZRTianBaoShiJian)
ORDER BY AutoID

------解决方案--------------------

select G.AutoID AS 流水号,G.ProID AS 项目编号,G.ProName AS 项目名称,
       J.ProJingDu AS 项目进度,J.ProWenTi AS 存在问题,J.XMFZRTianBaoShiJian AS 进度填报时间  
 from 表G G
 left join (select a.*
            from 表J a
            where not exists(select 1 
                             from 表J b 
                             where b.ProID=a.ProID 
                             and b.XMFZRTianBaoShiJian>a.XMFZRTianBaoShiJian)) J on G.proid=J.ProID
 order by G.AutoID
  相关解决方案