简体   繁体   中英

Msg 156, Level 15, State 1, Line 22 Incorrect syntax near the keyword 'having'

SELECT 
    CCDMS_Company.CompanyID, CCDMS_Company.CompanyName,
    CCDMS_Container.ContainerID, CCDMS_Container.Price, 
    SUM(CASE WHEN CCDMS_Container.ContainerSize = 1
             THEN 1 ELSE 0 END) AS size1,
    SUM(CASE WHEN CCDMS_Container.ContainerSize = 2
             THEN 1 ELSE 0 END) AS size2,
    SUM(CASE WHEN CCDMS_Container.ContainerSize = 3
             THEN 1 ELSE 0 END) AS size3,
    SUM(CASE WHEN CCDMS_Container.ContainerSize = 4
             THEN 1 ELSE 0 END) AS size4,
    SUM(CASE WHEN CCDMS_Container.ContainerSize = 5
             THEN 1 ELSE 0 END) AS size5
FROM 
    CCDMS_Company
INNER JOIN 
    CCDMS_Container ON CCDMS_Container.Co_ID = CCDMS_Company.CompanyID
                    AND CCDMS_Company.CityID = 1
GROUP BY 
    CCDMS_Company.CompanyID, CCDMS_Company.CompanyName,
    CCDMS_Container.ContainerID, CCDMS_Container.Price
HAVING
    size1 >=2
    AND size2 >= 1
    AND size3 >= 1
    AND size4 >= 0
    AND size5 >= 1 ;

This is my query and I keep getting this error even when I use where .

I don't know what to do .

Msg 156, Level 15, State 1, Line 22
Incorrect syntax near the keyword 'having'.

You can not use alias in having. Use below instead, or use CTE for simplicity

select CCDMS_Company.CompanyID , CCDMS_Company.CompanyName ,
CCDMS_Container.ContainerID ,CCDMS_Container.Price , 
sum(case when CCDMS_Container.ContainerSize=1
 then 1 else 0 end)as size1,
sum(case when CCDMS_Container.ContainerSize=2
 then 1 else 0 end)as size2,
sum(case when CCDMS_Container.ContainerSize=3
 then 1 else 0 end)as size3,
sum(case when CCDMS_Container.ContainerSize=4
 then 1 else 0 end)as size4,
sum(case when CCDMS_Container.ContainerSize=5
 then 1 else 0 end)as size5
   from 
CCDMS_Company
 inner join
CCDMS_Container
on CCDMS_Container.Co_ID = CCDMS_Company.CompanyID
and 
CCDMS_Company.CityID = 1
group by 
CCDMS_Company.CompanyID,CCDMS_Company.CompanyName,CCDMS_Container.ContainerID,CCDMS_Container.Price

having
    sum(case when CCDMS_Container.ContainerSize=1 then 1 else 0 end) >=2
and sum(case when CCDMS_Container.ContainerSize=2 then 1 else 0 end) >= 1
and sum(case when CCDMS_Container.ContainerSize=3 then 1 else 0 end) >= 1
and sum(case when CCDMS_Container.ContainerSize=4 then 1 else 0 end) >= 0
and sum(case when CCDMS_Container.ContainerSize=5 then 1 else 0 end) >= 1

You can't reference the aliases from your select statement in the having statement. Try rebuilding your query using a subquery to filter it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM