В настоящее время я работаю над проектом, в котором у меня есть список пациентов с зубами, и я должен отображать всех пациентов, у которых есть два конкретных кода процедуры, прилагаемых к их профилей. Эти пациенты должны иметь ОБЩИЕ коды процедур, а не тот или иной. Сначала я думал, что смогу выполнить это, используя базовый оператор AND в моем предложении WHERE, например.SQL Query: использование AND/OR в предложении WHERE
SELECT [stuff]
FROM [this table]
WHERE ProcedureCode = 'ABC123' AND ProcedureCode = 'DEF456';
Запрос конечно ничего не возвращает, потому что коды вводятся в индивидуальном порядке, и вы не можете иметь оба Процедуры 1 и 2 процедуры одновременно.
Я попытался переключить «И» на «ИЛИ» только из любопытства. Конечно, я теперь получаю результаты для пациентов, которые имеют только один код или другие, но у пациентов, у которых оба обнаруживаются также и коды отображаются в виде отдельных результатов, например, так:
Patient ID Last Name First Name Code Visit Date
1111111 Doe Jane ABC123 11-21-2015
5555555 Smith John ABC123 12-08-2015
5555555 Smith John DEF456 12-08-2015
Моего В наши дни SQL довольно ржавый. Я пытаюсь найти способ отфильтровать пациентов, таких как Джейн Доу, и включать только таких пациентов, как Джон Смит, у которых есть оба кодекса. Идеи?
ДОБАВЛЕНИЕ ИНФОРМАЦИЯ НА ОСНОВЕ ОТВЕТА Христианина:
Это то, что обновленный запрос выглядит следующим образом:
SELECT PatientID, LastName, FirstName, Code, VisitDate
FROM VisitInfo
WHERE PatientID IN
(
SELECT PatientID
FROM VisitInfo
WHERE Code = 'ABC123' OR Code = 'DEF456'
GROUP BY PatientID
HAVING COUNT(*) > 1
)
AND (Code = 'ABC123' OR Code = 'DEF456');
Так что я по-прежнему получать результаты, подобные следующему, когда пациент показывает только один но, возможно, несколько его примеров:
Patient ID Last Name First Name Code Visit Date
1111111 Doe Jane ABC123 11-02-2015
1111111 Doe Jane ABC123 11-21-2015
5555555 Smith John ABC123 12-08-2015
5555555 Smith John DEF456 12-08-2015
5555555 Smith John ABC123 12-14-2015
9999999 Jones Mike DEF456 11-22-2015
9999999 Jones Mike DEF456 12-06-2015
Несмотря на то, что Джейн Доу и Майк Джонс имеют 2 результата ts, они оба одинакового кода, поэтому мы не хотим их включать. И хотя у Джона Смита еще 2 одинакового кода, его результаты также включают оба кода, поэтому мы хотим сохранить его и других пациентов, подобных ему.
ДРУГОЙ UPDATE:
Я только что узнал, что я теперь должен включать в себя несколько основных демографических сведений для пациентов, о которых идет речь, поэтому я присоединился к моей VisitInfo таблицу с таблицей PatientInfo. Обновленный запрос выглядит следующим образом:
SELECT v.PatientID, v.LastName, v.FirstName, v.Code, v.VisitDate, p.DateOfBirth, p.Gender, p.PrimaryPhone
FROM VisitInfo v JOIN PatientInfo p ON v.PatientID = p.PatientID
WHERE v.PatientID IN
(
SELECT PatientID
FROM VisitInfo
WHERE Code = 'ABC123' OR Code = 'DEF456'
GROUP BY PatientID
HAVING COUNT(*) > 1
)
AND (Code = 'ABC123' OR Code = 'DEF456');
Я не был уверен, что, если новый РЕГИСТРИРУЙТЕСЬ затронет чьи-либо ответы ...
Хммм. Я думал, что это может сделать трюк, но теперь я получаю коды процедур для ВСЕХ процедур, а не только двух стоматологических, которые я ищу. И, глядя на список идентификаторов пациентов, я теперь пропускаю немало пациентов, которые мне предлагал оригинальный запрос. Я также получил несколько новых инструкций для этого проекта, поэтому я буду обновлять свой вопрос на мгновение ... – EJF
Обновлено добавлением предложения WHERE в основной запрос. –
Ах, потрясающе! Это сработало! Спасибо! – EJF