2016-03-08 108 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

相關問題