我有一些列,其值取决于行信息的总和。但是,当我到达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
我看到了compare counts,但是我不知道如何使它适用于查询和输出。任何帮助将不胜感激。
换句话说,有些人属于多个设施(我指的是每个人的设施)。另外,我正在计算他们为相同的设施回答59次的次数。然后,我比较一下计数,因为如果对所有设施都回答相同,则计数应该相同。然后,我发现计数不匹配的地方,以便我们进行修复。
答案 0 :(得分:0)
列别名不能用于引用WHERE
子句中的表达式。但是,即使它们可能会出错,因为必须在聚合后将HAVING
子句放入过滤器。
尝试:
...
HAVING sum(CASE
WHEN pf.facility IN ('S','H','E') THEN
1
ELSE
0
END)
<>
sum(CASE
WHEN fs.ques_id = 59
AND pf.facility IN ('S','H','E') THEN
1
ELSE
0
END)
...
sum(DISTINCT ...)
似乎也没有意义。并且外部DISTINCT
中的SELECT
也可能毫无用处。