Я пытаюсь найти наиболее дозированных пациентов в базе данных.Сумма доз должна быть рассчитана, а затем я должен динамически перечислить пациентов, которые получили столько доз.Запрос должен быть динамическим, и в списке может быть более 5 пациентов. Например, 5 самых больших доз составляют 7,6,5,4,3 дозы, но 3 человека получили 5 доз, поэтому мне придетсяперечислите в общей сложности 7 человек (пациенты, получающие 7,6,5,5,5,4,3 дозы).У меня проблемы, потому что вы не можете ссылаться на именованный столбец в предложении where, и я не знаю, как это исправить.
Запрос выглядит так:
SELECT
info.NAME, SUM(therapy.DOSE) AS total
FROM
dbo.PATIENT_INFORMATION_TBL info
JOIN
dbo.PATIENT_THERAPY_TBL therapy ON info.HOSPITAL_NUMBER = therapy.HOSPITAL_NUMBER
LEFT JOIN
dbo.FORMULARY_CLINICAL clinical ON clinical.ITEMID = therapy.ITEMID
WHERE
total IN (SELECT DISTINCT TOP 5 SUM(t.DOSE) AS 'DOSES'
FROM dbo.PATIENT_INFORMATION_TBL i
JOIN dbo.PATIENT_THERAPY_TBL t ON i.HOSPITAL_NUMBER = t.HOSPITAL_NUMBER
LEFT JOIN dbo.FORMULARY_CLINICAL c ON c.ITEMID = t.ITEMID
GROUP BY NAME
ORDER BY 'DOSES' DESC)
GROUP BY
info.NAME
ORDER BY
total DESC
База данных выглядит так:

Основнойвопрос: как я могу использовать предложение where / Имея, где мне нужно сравнить вычисляемый столбец со списком динамически вычисляемых значений?
Я использую Microsoft SQL Server 2012. DISTINCT
в подзапросенеобходимо, чтобы появлялись только первые 5 дозировок (например, без DISTINCT
Я получаю 7,6,5,4,3
с DISTINCT
Я получаю 7,6,6,5,4
, и моя цель - первая).