2015-10-06 71 views
1

我需要找到記錄多個性別的患者。 (我希望我能知道如何創建一個表。)找到多種性別的患者

[Hospital Number] [Sex Code] 

0000001   M 
0000002   F 
0000003   M 
0000003   F 

在這裏我們可以看到患者1和2是好的,但患者3具有多個性別。 (系統中有4種可用的性別)。

列爲[Hospital Number][Sex Code],該表稱爲Table1

+1

你嘗試過什麼 –

+1

每日提示的:GROUP BY和HAVING COUNT(DISTINCT) – jarlh

+0

MS SQL合併:*從表1組選擇hospital_number具有hospital_number計數(sex_code)> 1 *。您需要將此查詢轉換爲ms-access語法。 – niksofteng

回答

2

替代解決方案,做一個自我聯接:

select distinct p1.[hospital number] 
FROM patients AS p1 
INNER JOIN patients AS p2 
    ON p1.[hospital number] = p2.[hospital number] 
    AND p1.[Sex code] <> p2.[Sex code] 

返回[hospital number]如果同一[hospital number]但不同[Sex code]被發現。

現根據HarveyFrench的建議編輯!

+0

@ jarlh'SELECT DISTINCT [Hospital Number] FROM Table1 p1 JOIN Table1 p2 ON p1。[Hospital Number] = p2。[Hospital Number] AND p1。[Sex Code] <> p2。[性代碼]'給了我FROM語句中的語法錯誤,但我對這種技術感興趣 – Paul

+0

它實際上很基本。不要連接兩個不同的表格,而是將自己與表格連接起來。您需要表別名(例如p1和p2)來確定您正在使用哪一個別名。 – jarlh

+0

不好意思,但我仍然在FROM子句中出現語法錯誤。 – Paul

3

雖然在標準的SQL您只需使用GROUP BY查詢和COUNT(DISTINCT)是這樣的:如果你使用Microsoft Access

SELECT [hospital number] 
FROM patients 
GROUP BY [hospital number] 
HAVING COUNT(DISTINCT [Sex Code])>1 

你需要使用一個不同的解決方案,因爲COUNT DISTINCT是不提供。有多種方法可以解決你的問題,其中之一是使用子查詢:

SELECT [hospital name] 
FROM (
    SELECT DISTINCT [hospital name], [Sex code] 
    FROM Patients 
) AS s 
GROUP BY [hospital name] 
HAVING COUNT(*)>1 

請注意,使用COUNT(*)的子查詢將包括具有「空」的性別(同時計數不同的查詢將患者只計數非空值)。

您可能需要使用

COUNT(*)>1 

返回有多個性別(也空和非空性別)的患者。如果你只是想忽略空,你可以使用:

COUNT([hospital number])>1 
+0

感謝您的建議和意見。我確實嘗試了一些東西,但他們沒有工作,所以我不想在這篇文章中填寫不必要的評論。好的工作fthiella,如果我有足夠的聲譽,我會用一個加號標記答案。 – Paul

+0

SQL是通用的(Oracle,MS Access等)我認爲你的意思是「在SQL Server中......」,這與MS Access問題無關:) – Fionnuala

+0

@Fionnuala是的,它與問題本身無關,但我的意思是:爲MS Access使用子查詢(或最小/最大喜歡戈登的答案),但如果你的dbms支持計數不同,最好使用計數不同 - 也很重要的是要注意,一個子查詢與計數(*)將處理空值不同於具有不同計數的查詢 – fthiella

4

你不需要MS Access中的子查詢。您可以比較最小值和最大值:

SELECT [hospital number] 
FROM patients 
GROUP BY [hospital number] 
HAVING MIN([Sex Code]) <> MAX([Sex Code]); 

這應該也會有比count更好的性能。其中[Sex Code]NULL呈現彼此價值它不會返回行(既不會COUNT(DISTINCT),即NULL被忽略,這是很容易解決的,但你要如何處理NULL目前還不清楚。

+0

對我來說幸運的是我不能在這個特定的數據庫中有NULL值 – Paul

+0

有趣的是,你聲明的結果比jarlh少3,結果我確實有NULL性別。典型。但它有效,所以再次感謝。 – Paul

+0

在這種情況下,用nz([sex code],0)替換[sex code],以便處理空值。 – HarveyFrench

1

。或者也可以簡單

SELECT [hospital number] 
    FROM patients 
GROUP BY [hospital number] 
HAVING COUNT(*)>1 
+0

我很喜歡這個解釋的簡單性,但是它強調了忽略提及每個記錄可以(並且具有)具有相同性別的多個條目,因此在上面的例子中可能有多個條目作爲患者1的M男 – Paul

+0

這就是「MultiGender」嗎?我以前沒聽說過。 TransGeneder是的,但接下來呢! ;-) – HarveyFrench

+0

未知和不確定是geniune選項,但我們最終也會得到類似「4」的廢話 – Paul