2016-09-19 49 views
0

我有一些SQL,這是一部分的一部分,與語句 我一直收到一個錯誤,「NEWID」是無效的上下文中使用sqlstate 42703.DB2 SQL,不能定義列作爲

更新:錯誤一直來自group by子句使用有函數我沒有放在原代碼中,因爲我認爲它不是問題。所以我更新了代碼以顯示完整版本。

有沒有人知道該聲明有什麼問題?

HATSTABLE1 (HATId, NewID) as (
select HA.HATId as "ID", 
round(
    cast(
    sum(
     case when HA.ID = 4 or 
     HA.ID < 0 
     then 1 else 0 end 
    ) AS FLOAT 
)/count(*) * 100, 
    2 
) AS NewID 
from Hats T 
    join Heads HD on 
     T.ID=HD.HatID 
group by T.ID 
having NewID >1 
+0

'NewId'是不一樣的' 「NEWID」'。 – mustaccio

+0

我試過將「NewID」改爲「NewId」,但是這給了我同樣的問題 – MrClamps

+1

'NewId'與''NewId''不一樣。 SQL標識符隱式轉換爲大寫,但將它們用雙引號括起來使其區分大小寫。 – mustaccio

回答

0

嘗試

with tmp as (
select T.HATId as "ID", 
sum(case when T.ID = 4 or HA.ID < 0 then 1 else 0 end) as sum1, 
count(*) as nb 
from Hats T 
group by T.HATId 
) 
select HATId, round(cast(sum1 as decimal)/ nb * 100, 2) NewID 
from tmp