2

我想获取不同的患者记录并在网格中显示

病人桌

PatientId, FirstName, LastName, City

预订表

BookingId, PatientId, CategoryId, BookingDate

在查询下方运行会给出重复的患者记录。发生这种情况是因为我为不同日期的同一患者预订了 3 次。此查询进行连接并带来 3 条患者记录而不是 1 条患者记录。

 SELECT  DISTINCT PAT.PatientId  
 ,PAT.FirstName
 ,PAT.LastName      

 ,ROW_NUMBER() OVER (ORDER BY PAT.PatientId DESC) AS RowNumber 
 INTO #itemSearch  
 FROM  dbo.Patient AS PAT  

 INNER JOIN dbo.Booking AS B  
 ON PAT.PatientId = B.PatientId WHERE  B.CategoryId = 1

如果我删除这一行,我只会得到 1。但我需要这个临时表来进行其他分页过程。

ROW_NUMBER() OVER (ORDER BY PAT.PatientId DESC) AS RowNumber INTO #itemSearch  

即使他们有 3 个预订,我如何才能只获得 1 个患者?

4

1 回答 1

2

使用 GROUP BY 子句

 SELECT PAT.PatientId  
        ,PAT.FirstName
        ,PAT.LastName      
        ,ROW_NUMBER() OVER (ORDER BY PAT.PatientId DESC) AS RowNumber 
 INTO #itemSearch  
 FROM  dbo.Patient AS PAT  
   INNER JOIN dbo.Booking AS B  
     ON PAT.PatientId = B.PatientId 
 WHERE  B.CategoryId = 1
 GROUP BY PAT.PatientId, PAT.FirstName, PAT.LastName

或将 DISTINCT 与DENSE_RANK()排名函数一起使用

 SELECT DISTINCT PAT.PatientId  
        ,PAT.FirstName
        ,PAT.LastName      
        ,DENSE_RANK() OVER (ORDER BY PAT.PatientId DESC) AS RowNumber 
 INTO #itemSearch  
 FROM  dbo.Patient AS PAT  
   INNER JOIN dbo.Booking AS B  
     ON PAT.PatientId = B.PatientId 
 WHERE  B.CategoryId = 1
于 2013-03-18T12:52:30.133 回答