我对我的SQL感到非常生锈,因此这可能并不那么复杂,但是我似乎无法破解它。
我有一个包含两个表的数据库-一个包含患者的详细信息,另一个包含每个患者的就诊次数。 Patient_ID是患者的唯一标识符,用在“访问”表中,我正尝试提取不同患者的数量以及他们已进行的访问的总数(即,患者A在2018年访问了3次)>
我试图获取每个YEAR(每年访问次数)中某个中心就诊的不同患者的总数,并从“患者”表(性别,国家等)中查看有关患者的信息。
我尝试了几种计数和独特的功能,但是什么也无法工作。下面是最后的尝试之一,但是在这种情况下,distinct函数实际上并未显示出不同的值(我做错了吗?)。它确实可以在其他查询中使用...任何帮助将不胜感激。
SELECT DISTINCT Visits.Patient_ID, Patient.Gender, Patient.Village, Visits.Months_Of_Visit, Visits.Year
FROM Visits
INNER JOIN Patient ON Patient.Patient_ID=Visits.Patient_ID
WHERE Year='2018';
预期结果:
唯一的患者ID,患者性别,患者村庄PER月和PER年。
答案 0 :(得分:1)
如果您希望每个患者访问每个村庄/月/年的次数:
SELECT Count(*) AS CountVisits, Visits.Patient_ID, Gender, Village, Months_Of_Visit, [Year]
FROM Visits
INNER JOIN Patient ON Patient.Patient_ID=Visits.Patient_ID
GROUP BY Patient_ID, Gender, Village, Months_Of_Visit, [Year];
如果您想要每个村庄/月/年的DISTINCT患者数量:
查询1:
SELECT DISTINCT Visits.Patient_ID, Gender, Village, Months_Of_Visit, [Year]
FROM Visits
INNER JOIN Patient ON Patient.Patient_ID=Visits.Patient_ID;
Query2:
SELECT Count(*) AS CountPerVillage, Village, Months_Of_Visit, [Year]
FROM Query1 GROUP BY Village, Months_Of_Visit, [Year];
全合一:
SELECT Count(*) AS CountPerVillage, Village, Months_Of_Visit, [Year]
FROM (SELECT DISTINCT Visits.Patient_ID, Village, Months_Of_Visit, [Year]
FROM Visits INNER JOIN Patient ON Patient.Patient_ID=Visits.Patient_ID) AS Query1
GROUP BY Village, Months_Of_Visit, [Year];
因为Year是保留字(它是一个内在函数),所以将其括在[]中或在字段引用中包括表名前缀。