繁体   English   中英

寻找多性别的患者

[英]Find patients with multiple gender

我需要找到记录有多种性别的患者。 (我希望我知道如何创建表。)

[Hospital Number] [Sex Code]

0000001           M
0000002           F
0000003           M
0000003           F

在这里我们可以看到患者1和2都可以,但是患者3有多种性别。 (系统中有4种可用性别)。

列是[Hospital Number][Sex Code] ,该表称为Table1

MS Access中不需要子查询。 您可以比较最小值和最大值:

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

这也应具有比其他计数更好的性能。 它不会返回[Sex Code]NULL 具有另一个值的行( COUNT(DISTINCT)都不会。)即会忽略NULL 。这很容易修复,但尚不清楚如何处理NULL

在标准SQL中,您只需使用GROUP BY查询和COUNT(DISTINCT),如下所示:

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

如果您使用的是Microsoft Access,则需要使用其他解决方案,因为没有提供COUNT DISTINCT。 有多种方法可以解决您的问题,其中一种方法是使用子查询:

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

请注意,带有count(*)的子查询将包括性别为“ null”的患者(而计数不同的查询将仅对非null值进行计数)。

您可能要使用

COUNT(*)>1

返回所有具有多种性别(以及null和non-null性别)的患者。 如果您只想忽略null,则可以使用:

COUNT([hospital number])>1

替代解决方案,做一个自我加入:

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]但返回的[Sex code]不同,则返回[hospital number]

现在根据HarveyFrench的建议进行编辑!

甚至更简单。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM