2

個別の患者記録を取得してグリッドに表示したい

患者テーブル

PatientId, FirstName, LastName, City

予約表

BookingId, PatientId, CategoryId, BookingDate

以下のクエリを実行すると、重複した患者レコードが得られます。これは、同じ患者に対して別の日付で 3 つの予約があるために発生しています。このクエリは結合を作成し、1 つの患者レコードではなく 3 つの患者レコードを取得します。

 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 に答える