У меня есть несколько столбцов, значения которых зависят от сумм для информации о строке.Однако, когда я доберусь до оператора where, он не позволит мне сравнить эти значения, поэтому я смогу просто отобразить значения с проблемами.См. Комментарий *** в запросе на выдачу.
Вот так выглядит мой запрос:
SELECT
DISTINCT
p.ID
,p.Last
,p.First
,SUM(distinct CASE WHEN pf.facility in ('S','H','E') then 1 ELSE 0 END) as facility_count
,SUM(distinct CASE WHEN (fs.ques_id = 59 AND pf.facility in ('S','H','E') ) THEN 1 ELSE 0 END) AS sum_qst_59
FROM person p
inner JOIN person_facilities pf ON p.ID = pf.ID
LEFT JOIN dbo.ADD_ANSW fs ON p.id = fs.id
WHERE
pf.Facility in ('s', 'h', 'e')
AND
pf.status in ('Active')
AND
facility_count != sum_qst_59 ***--this doesn't work. Says no such columns***
group by p.id, Last, First
order by Last
Я видел сравнить счетчики , но не могу понятькак заставить это работать для моего запроса и вывода.Любая помощь будет принята с благодарностью.
Другими словами, есть люди, которые принадлежат к нескольким учреждениям (которые я считаю своими учреждениями для каждого человека).Кроме того, я считаю, сколько раз у них есть ответ 59 для тех же самых средств.Затем я сравниваю количество, потому что они должны быть одинаковыми, если они ответили на все вопросы.Затем я нахожу, где счетчики не совпадают, поэтому мы можем это исправить.
* Обновление - я пробую то, что было предложено, но в нем есть ошибка
Incorrect syntax near keyword 'having'
SELECT
DISTINCT
p.ID
,p.Last
,p.First
--change in having and sum line below
,having SUM(distinct CASE WHEN pf.facility in ('S','H','E') then 1 ELSE 0 END) as facility_count
<>
SUM(distinct CASE WHEN (fs.ques_id = 59 AND pf.facility in ('S','H','E') ) THEN 1 ELSE 0 END) AS sum_qst_59
FROM person p
inner JOIN person_facilities pf ON p.ID = pf.ID
LEFT JOIN dbo.ADD_ANSW fs ON p.id = fs.id
WHERE
pf.Facility in ('s', 'h', 'e')
AND
pf.status in ('Active')
group by p.id, Last, First
order by Last
Обновление 2: Также пробовал следующий, но все еще неправильный синтаксис, имеющий -
SELECT
DISTINCT
p.ID
,p.Last
,p.First
,SUM(distinct CASE WHEN pf.facility in ('S','H','E') then 1 ELSE 0 END) as facility_count
,SUM(distinct CASE WHEN (fs.ques_id = 59 AND pf.facility in ('S','H','E') ) THEN 1 ELSE 0 END) AS sum_qst_59
FROM person p
inner JOIN person_facilities pf ON p.ID = pf.ID
LEFT JOIN dbo.ADD_ANSW fs ON p.id = fs.id
WHERE
pf.Facility in ('s', 'h', 'e')
AND
pf.status in ('Active')
--change in having and sum line below
AND --this has incorrect syntax near having
having SUM(distinct CASE WHEN pf.facility in ('S','H','E') then 1 ELSE 0 END)
<>
SUM(distinct CASE WHEN (fs.ques_id = 59 AND pf.facility in ('S','H','E') ) THEN 1 ELSE 0 END)
group by p.id, Last, First
order by Last