比较计数列无法识别

时间:2019-05-31 19:42:21

标签: sql group-by count compare sql-order-by

我有一些列,其值取决于行信息的总和。但是,当我到达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次的次数。然后,我比较一下计数,因为如果对所有设施都回答相同,则计数应该相同。然后,我发现计数不匹配的地方,以便我们进行修复。

1 个答案:

答案 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也可能毫无用处。