2012-05-05 50 views
-2

*如何GROUP BY在左加入

我得到的結果如下圖所示

PID這裏重複,2行顯示1例患者(約翰)

我不得不只顯示1行爲patient_name(約翰) 我必須顯示患者約翰一行,如果他有同一個日期或任何其他日期多次訪問..

+2

2人次,2行。爲什麼它會不同?你有'從Patient_Master左邊加入Patient_Visit' –

+0

我必須只顯示1行,以便對患者進行多次訪問 –

+2

因此,您不希望每個訪問都看到每個訪問,但只有一個(哪個是最後一個?)? –

回答

5

顯示一行每名患者 - 和他/她上次訪問日期:

SELECT 
    Patient_Master.PID, 
    Patient_Master.Patient_ID, 
    Patient_Master.Patient_Name, 
    Patient_Master.Sex, 
    Patient_Master.Patients_Birth_Date, 
    Patient_Last_Visit.Visit_Date 
FROM 
    Patient_Master 
    LEFT JOIN 
    (SELECT 
      PID, 
      MAX(Visit_Date) AS Visit_Date 
     FROM 
      Patient_Visit 
     GROUP BY 
      PID 
    ) AS Patient_Last_Visit 
     ON Patient_Master.PID = Patient_Last_Visit.PID 
ORDER BY 
    Patient_Master.Patient_Name 
+0

謝謝ypercube –

0

我不明白你需要什麼。也許

GROUP BY PID, Patient_ID, Patient_Name, Sex, 
     Patients_Birth_Date,MAX(Visit_Trans_ID),MAX(Visit_Date) 
+0

如果患者john在同一日期或任何其他日期有多次訪問,我必須顯示一行。 –

1

@nikhil你能更具體一點嗎?

如果您想爲患者提供一行,您爲什麼要加入表格?

我認爲你應該做從Patient_Master列和一些匯聚組Patient_Visit

編輯: 這應該工作

SELECT 
     Patient_Master.PID, 
     Patient_Master.Patient_ID, 
     Patient_Master.Patient_Name, 
     Patient_Master.Sex, 
     Patient_Master.Patients_Birth_Date 
    FROM 
     Patient_Master 
    INNER JOIN 
     Patient_Visit ON Patient_Master.PID = Patient_Visit.PID 
    GROUP BY 
     Patient_Master.PID, 
     Patient_Master.Patient_ID, 
     Patient_Master.Patient_Name, 
     Patient_Master.Sex, 
     Patient_Master.Patients_Birth_Date 
    ORDER BY 
     Patient_Master.Patient_Name 

此查詢選擇有關患者進行了至少一次信息。

+0

:i必須爲病人約翰顯示一行,如果他在同一日期或任何其他日期有多次訪問。 –

1

使用下面的查詢將返回單一row..if所有值行是相同

SELECT 
    Patient_Master.PID, 
    Patient_Master.Patient_ID, 
    Patient_Master.Patient_Name, 
    Patient_Master.Sex, 
    Patient_Master.Patients_Birth_Date, 
    Patient_Visit.Visit_Date 
FROM 
    Patient_Master 
LEFT JOIN 
    Patient_Visit ON Patient_Master.PID = Patient_Visit.PID  
Group by 
    Patient_Master.PID, 
    Patient_Master.Patient_ID, 
    Patient_Master.Patient_Name, 
    Patient_Master.Sex, 
    Patient_Master.Patients_Birth_Date, 
    Patient_Visit.Visit_Date 
ORDER BY 
    Patient_Master.Patient_Name 
+0

使用上面的查詢重新打開的行獲取一個PID多次訪問 –

+0

這是真的,但您沒有在您的選擇查詢中選擇Visit_Trans_ID。所以我認爲你不介意訪問transid。如果你的訪問日期不同,那麼你可以得到2行......但在上面的查詢中你的訪問日期是相同的。所以它是有道理的,單個用戶多次訪問同一天,然後有單行..但如果他訪問不同的日子,然後有不同的行..我的解決方案是工作,如果你改變訪問日期。 –

+0

使用Visit_Trans_ID我可以做什麼..任何想法 –

1

我覺得這會給你單列,試試這個

SELECT 
     Patient_Master.PID, 
     Patient_Master.Patient_ID, 
     Patient_Master.Patient_Name, 
     Patient_Master.Sex, 
     Patient_Master.Patients_Birth_Date, 
     Patient_Visit.Visit_Date 
    FROM 
     Patient_Master 
    INNER JOIN 
     Patient_Visit ON Patient_Master.PID = Patient_Visit.PID 
    GROUP BY Patient_Master.PID 
    ORDER BY 
     Patient_Master.Patient_Name 
+0

錯誤:列'Patient_Master.Patient_ID'在選擇中無效列表,因爲它不包含在聚合函數或GROUP BY子句中。 –

1

顯示每個不同的日期一個病人:

SELECT M.PID, 
     M.Patient_ID, 
     M.Patient_Name, 
     M.Sex, 
     M.Patients_Birth_Date, 
     A.Visit_Date 
FROM Patient_Master AS M 
     OUTER APPLY 
     (
       SELECT DISTINCT V.Visit_Date 
       FROM Patient_Visit AS V 
       WHERE V.PID = M.Pid 
     ) AS A; 

顯示一個病人和最近的日期:

SELECT M.PID, 
     M.Patient_ID, 
     M.Patient_Name, 
     M.Sex, 
     M.Patients_Birth_Date, 
     A.Visit_Date 
FROM Patient_Master AS M 
     OUTER APPLY 
     (
      SELECT MAX(V.Visit_Date) AS Visit_Date 
      FROM Patient_Visit AS V 
      WHERE V.PID = M.Pid 
     ) AS A;