当前位置: 代码迷 >> Sql Server >> 多表连接查询根据条件过滤重复项的存储过程
  详细解决方案

多表连接查询根据条件过滤重复项的存储过程

热度:44   发布时间:2016-04-24 09:24:12.0
多表连接查询根据条件过滤重复项的存储过程求助



楼主菜鸟一枚,没有SQL基础,网上查了些资料,现在只写出如下存储过程,得到的结果是不同版本的B12会全部包含在结果中。本来想加group by来筛选,奈何水平有限,尝试许久,捣鼓不出来,求各位大侠指教!!不胜感激!

ALTER PROCEDURE [dbo].[GetInfo] 
@Guid uniqueidentifier
AS
BEGIN
SET NOCOUNT ON;
SELECT a.*, c.* 
from (select *from Table_B b where b.pGUID = @Guid)
as c inner join Table_A a
on c.sGUID = a.GUID 
order by c.件号 asc
END

------解决思路----------------------
ALTER PROCEDURE [dbo].[GetInfo] 
    @Guid uniqueidentifier
AS
BEGIN
SET NOCOUNT ON;
SELECT T4.pGuid,T4.sGUID,T3.代号,T3.其他列,T4.其他列
FROM(
SELECT T1.pGuid,T2.代号,MAX(T2.版本)版本
FROM Table_B T1
JOIN Table_A T2 ON T1.sGUID=T2.GUID
WHERE T1.pGuid=@Guid
GROUP BY T1.pGuid,T2.代号
)T  JOIN Table_A T3 ON T.代号=T3.代号 AND T.版本=T3.版本
JOIN Table_B T4 ON T3.GUID=T4.sGUID
END

------解决思路----------------------

ALTER PROCEDURE [dbo].[GetInfo] 
    @Guid uniqueidentifier
AS
BEGIN
    SET NOCOUNT ON;
SELECT pguid,sguid,代号
FROM
(
SELECT b.pguid,b.sguid,a.代号,ROW_NUMBER() OVER(PARTITION BY a.代号 ORDER BY a.版本 DESC) re
FROM Table_A a
JOIN Table_B b ON a.guid=b.sguid
WHERE b.pguid=@Guid
) a
WHERE re=1
END

------解决思路----------------------
    SELECT sGUID,pGUID,代号,版本,a其他列,件号,b其他列
      FROM (
            SELECT *,
                   ROW_NUMBER() OVER(PARTITION BY a.代号 ORDER BY a.版本 DESC) rn
              FROM Table_a a
              JOIN Table_b b
                ON a.GUID = b.sGUID
           ) t
     WHERE rn = 1
  ORDER BY 件号
  相关解决方案