2017-08-28 213 views
1

我試圖創建一個「錯誤列」並將條件放入'Case when'中。我收到以下錯誤:CASE WHEN錯誤 - 在預計條件的上下文中指定的非布爾類型的表達式,在'THEN'附近

在'THEN'附近預期有 條件的上下文中指定的非布爾類型表達式。

我的查詢是:

SELECT ROWID, [Alternate_number], DELIVERY_DATE, DP1, [DP1__],[DP2],[DP2__],[Deliver_to_EDI_warehouse_number] as EDI_warehouse,[Cube], Null as [Quantity], Null as [Balance_DP], 

CASE WHEN isnull([DP1__],0) THEN 'MISSING DP1' WHEN [DP1__]='' THEN 'MISSING DP1' 
WHEN isnull([Alternate_number],0) then 'MISSING WIN' when [Alternate_number]= '' then 'MISSING WIN' 
WHEN LEN(Delivery_date) = 10 THEN '' WHEN left(right((VIEW_MRP_Splitting_Cube_checker.Delivery_date),11),1) <> '%-%' THEN "DATE 2 TOO LONG" 
WHEN right(Left((VIEW_MRP_Splitting_Cube_checker.Delivery_date},11),1) <> '%-%' THEN "DATE 1 TOO LONG" 
else 'No Error' end as [Error Type] 

from VIEW_MRP_Splitting_Cube_checker 
+1

您在條件'WHEN isnull([DP1 __],0)THEN ...'時也有錯誤。改成'WHEN isnull([DP1 __],0)= 0 THEN ...'或'WHEN [DP1__]是NULL然後...' – Rokuto

+0

看起來每個人都發現了不同的錯誤,並且確實有不少錯誤。 –

+0

這是非標準的SQL開頭(例如'[..]'樣式標識符,使用'''字符串文字')。您正在使用哪些DBMS? –

回答

0

您濫用撇號和括號

SELECT ROWID, [Alternate_number], DELIVERY_DATE, DP1, [DP1__],[DP2],[DP2__],[Deliver_to_EDI_warehouse_number] as EDI_warehouse,[Cube], Null as [Quantity], 
    NULL as [Balance_DP], 
    CASE 
     WHEN isnull([DP1__],0) THEN 'MISSING DP1' 
     WHEN [DP1__]='' THEN 'MISSING DP1' 
     WHEN isnull([Alternate_number],0) then 'MISSING WIN' 
     WHEN [Alternate_number]= '' then 'MISSING WIN' 
     WHEN LEN(Delivery_date) = 10 THEN '' 
     WHEN left(right((VIEW_MRP_Splitting_Cube_checker.Delivery_date),11),1) <> '%-%' THEN 'DATE 2 TOO LONG' 
     WHEN right(Left((VIEW_MRP_Splitting_Cube_checker.Delivery_date),11),1) <> '%-%' THEN 'DATE 1 TOO LONG' 
     else 'No Error' 
    END as [Error Type] 
from VIEW_MRP_Splitting_Cube_checker 
0

更換

WHEN right(Left((VIEW_MRP_Splitting_Cube_checker.Delivery_date},11),1) <> '%-%' 
                   ^----here is the problem 

WHEN right(Left((VIEW_MRP_Splitting_Cube_checker.Delivery_date),11),1) <> '%-%' 
0

,而不是濫用isnull()而不是使用[col] is null你可以結合你的兩個或null空支票的使用nullif()像這樣:

select 
    rowid 
    , [Alternate_number] 
    , delivery_date 
    , dp1 
    , [dp1__] 
    , [dp2] 
    , [dp2__] 
    , [Deliver_to_edi_warehouse_number] as edi_warehouse 
    , [Cube] 
    , null as [Quantity] 
    , null as [Balance_dp] 
    , case 
     when nullif([dp1__],'') is null then 'missing dp1' 
     when nullif([Alternate_number],'') is null then 'missing win' 
     when len(Delivery_date) = 10 then '' 
     when left(right((view_mrp_Splitting_Cube_checker.Delivery_date),11),1) <> '%-%' 
      then 'date 2 too long' 
     when right(Left((view_mrp_Splitting_Cube_checker.Delivery_date),11),1) <> '%-%' 
      then 'date 1 too long' 
     else 'No Error' 
    end as [Error Type] 
from view_mrp_Splitting_Cube_checker 
0

我試圖清理情況的一部分,我希望它的作品。

CASE 
    WHEN [DP1__] IS NULL OR [DP1__]='' THEN 'MISSING DP1' 
    WHEN [Alternate_number] IS NULL OR [Alternate_number] ='' then 'MISSING WIN' 
    WHEN LEN(Delivery_date) = 10 THEN '' 
    WHEN left(right((VIEW_MRP_Splitting_Cube_checker.Delivery_date),11),1) <> '%-%' THEN 'DATE 2 TOO LONG' 
    WHEN right(Left((VIEW_MRP_Splitting_Cube_checker.Delivery_date),11),1) <> '%-%' THEN 'DATE 1 TOO LONG' 
    ELSE 'No Error' 
END AS [Error Type] 
相關問題