从选择查询结果中选择唯一的行

时间:2020-09-16 07:23:09

标签: sql sql-server join

enter image description here我有一个程序,要通过连接四个表来获取数据。

这是我的代码

alter PROCEDURE [dbo].[GetServiceRequestforLead]
    @professionalArea nvarchar (35) = '',
    @status nvarchar (15) = '',
    @experience nvarchar (15) = '',
    @PageNumber    BIGINT = 1, 
    @PageSize      BIGINT =20,
    @userid bigint = 0
AS 
BEGIN 
    SELECT *
    FROM (
        SELECT Row_number() OVER (ORDER BY sc.Addeddate DESC) AS Row, sc.*
            , TotalRows = Count(*) OVER()
        FROM (
            select Mod_UserDetails.Email as LeadEmailId, Mod_UserDetails.ID as LeaduserId
                , ProfessionType, Mod_UserDetails.FirstName as LeadFirstName, Mod_UserDetails.LastName as LeadLastName
                , Mod_UserDetails.PhoneNo1 as LeadMobile
                , f.*
            from Lead_RequestForm f
            inner join Lead_ProfessionalArea on Lead_ProfessionalArea.ID = f.Profession
            left join ServiceProviderRequestMapping on f.RequestId =  ServiceProviderRequestMapping.RequestId    
            left join mod_userdetails on mod_userdetails.ID  = ServiceProviderRequestMapping.Leaduserid        
            where f.ExperienceRequired like  '%'+@experience+'%'
            AND f.Status like '%' + @status + '%'
            AND Lead_ProfessionalArea.ProfessionType like '%'+ @professionalArea +'%'
            AND (ServiceProviderRequestMapping.IsDeleted is null OR ServiceProviderRequestMapping.IsDeleted = 0)  
        )   sc 
    ) AS query  
    WHERE  row > (  @PageSize   *( @PageNumber -1))  
    AND row <= (  @PageSize   *   @PageNumber  )  
END 

 

通过执行此操作,我为RequestId表的Lead_RequestForm f列获得了一行以上。数据在两行中都是唯一的,但要求ID相同。我只想获取具有相同Requestid列的第一条记录。

我在这里添加了捕捉,请求ID列具有重复值,我只希望一个带请求ID的roq,所以只想选择第一个。

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作-

alter PROCEDURE [dbo].[GetServiceRequestforLead]
@professionalArea nvarchar (35) = '',
@status nvarchar (15) = '',
@experience nvarchar (15) = '',
@PageNumber    BIGINT = 1, 
@PageSize      BIGINT =20,
@userid bigint = 0
AS 
 BEGIN 
Select Tb.*
from
(SELECT t.*, row_number() OVER (partition by RequestId order by Rowid) as seq_nbr
FROM (
    SELECT Row_number() OVER (ORDER BY sc.Addeddate DESC) AS Row, sc.*
        , TotalRows = Count(*) OVER()
    FROM (
        select Mod_UserDetails.Email as LeadEmailId, Mod_UserDetails.ID as LeaduserId
            , ProfessionType, Mod_UserDetails.FirstName as LeadFirstName, Mod_UserDetails.LastName as LeadLastName
            , Mod_UserDetails.PhoneNo1 as LeadMobile
            , f.*
        from Lead_RequestForm f
        inner join Lead_ProfessionalArea on Lead_ProfessionalArea.ID = f.Profession
        left join ServiceProviderRequestMapping on f.RequestId =  ServiceProviderRequestMapping.RequestId    
        left join mod_userdetails on mod_userdetails.ID  = ServiceProviderRequestMapping.Leaduserid        
        where f.ExperienceRequired like  '%'+@experience+'%'
        AND f.Status like '%' + @status + '%'
        AND Lead_ProfessionalArea.ProfessionType like '%'+ @professionalArea +'%'
        AND (ServiceProviderRequestMapping.IsDeleted is null OR ServiceProviderRequestMapping.IsDeleted = 0)  
    )   sc 
) AS query  
WHERE  row > (  @PageSize   *( @PageNumber -1))  
AND row <= (  @PageSize   *   @PageNumber  ) 
)t
)Tb
where Tb.seq_nbr = 1
END 
相关问题