2013-03-18 37 views
2

我想採取不同的病人記錄,並顯示在一個網格取區分記錄與JOIN

耐心表

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個病人?

+2

使用**通過PAT.PatientID)集團** – Dhinakar 2013-03-18 12:05:34

+0

因爲DISTINCT將ROW_NUMBER後執行(排名功能。 – 2013-03-18 12:15:45

+0

@AlexanderFedorenko,哦,我明白了。還有其他的選擇嗎? – Billa 2013-03-18 12:16:23

回答

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 
+0

這真是太棒了:)爲我工作:) – Billa 2013-03-18 13:04:47

+0

@BadDeveloper Answer updated;) – 2013-03-18 13:22:02