2016-01-04 2 views
0
SELECT patient.id 
    , patient.name 
FROM patient,patientdx 
WHERE patient.id = patientdx.id 
     AND disease IN ('HIV', 'DM') 
GROUP BY id HAVING COUNT(DISTINCT disease) = 2; 

Проблема COUNT(DISTINCT), не поддерживается версией 97. Есть ли альтернативный запрос для получения того же результата?VB MS Access 97 С учетом (отдельной) ошибки

ответ

0

Вы должны научиться правильно использовать join синтаксис. Тем не менее, вы можете делать то, что вы хотите без агрегации с помощью IN:

SELECT patient.* 
FROM patient 
WHERE patient.id IN (SELECT id FROM patientdx WHERE disease = 'HIV') AND 
     patient.id IN (SELECT id FROM patientdx WHERE disease = 'DM'); 

Хотя есть способы, чтобы сделать работу агрегации запросов, это является альтернативой запроса агрегации.

+0

Спасибо! У меня есть чему поучиться у всех вас! : D –

0

Я думаю, что это может сработать для вас.

... 
HAVING 
    MAX(disease) = 'HIV' AND MIN(disease) = 'DM' 
AND MAX(IIF(disease > 'DM' AND disease < 'HIV', 1, 0)) = 0 

Чтобы перевести: Самый большой disease по алфавиту ВИЧ, а низшая DM. Другое выражение гарантирует, что между ними не будет ничего.

EDIT: Я не заметил, что вы уже ограничили disease в предложении WHERE двум представляющим интерес интересам. Поэтому я вижу, что ваша цель в использовании HAVING заключается в том, чтобы убедиться, что у пациента есть оба этих диагноза. Это делает последнее условие избыточным в вашем случае, но, возможно, удобным трюком в будущем. Чтобы повторить, я думаю, что этого простого условного достаточно для вас.

HAVING MAX(disease) = 'HIV' AND MIN(disease) = 'DM' 

Вы можете, конечно, попробовать первый и сообщить нам/мне, если Access 97 справится с этим нормально.

+0

Спасибо! Я узнал от тебя что-то новое! : D –