2016-03-08 112 views
0
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 ; 

这是我的查询,即使在我使用where的地方,我仍然收到这个错误。Msg 156,Level 15,State 1,Line 22关键词'having'附近的语法不正确

我不知道该怎么做。

消息156,级别15,状态1,行22
关键字 '具有' 近不正确的语法。

+0

将计算放入CTE /子查询中,然后用'where引用别名'size *'过滤。 –

+0

我可以理解,'having'子句在语法上不正确,因为它不理解列别名。但是,这应该会生成“无效的列名称”错误,而不是“错误的语法”错误。我怀疑你在'having'关键字周围有一个无效字符。 –

+0

我试图做类似于这个http://stackoverflow.com/questions/17194145/sql-count-based-on-column-value,但我想要做的事情之后,是只返回公司有相同或更多的指定的数字,我看到这个问题http://stackoverflow.com/questions/15618812/sum-columns-in-mysql-then-use-the-result-in-where-clause,所以我结合他们跳来跳去,它会和我一起工作。 – Nysa

回答

0

您不能在having语句中引用select语句中的别名。尝试使用子查询重新构建您的查询以对其进行过滤。

1

您不能在拥有别名。为了简单起见,请使用下面的代码或使用CTE

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 
+0

它正在工作,但不幸的是它没有返回正确的结果。 – Nysa

+0

@Nysa,你会得到什么和预期的? – FLICKER

+0

我有3家公司1001,1002,1003和11个不同尺寸的集装箱1,2,3,4,5 我只想返回公司中具有相同数量或更多指定数量的集装箱。 例如,如果我想从2号容器中取2个容器,从2号容器取3个容器,那么只有公司中具有2个或更多1号和3号或更多2号容器的容器应该出现假设只有公司1001有容器,它应该单独出现。 但知道它返回所有这些。 – Nysa

相关问题