【问题标题】:CASE WHEN Error - An expression of non-boolean type specified in a context where a condition is expected, near 'THEN'CASE WHEN 错误 - 在预期条件的上下文中指定的非布尔类型表达式,靠近“THEN”
【发布时间】:2018-02-05 16:51:07
【问题描述】:

我正在尝试创建一个“错误列”并将条件放入“Case when”中。我收到以下错误:

在上下文中指定的非布尔类型的表达式 预计会出现“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

【问题讨论】:

  • 您的条件WHEN isnull([DP1__],0) THEN... 也有错误。更改为 WHEN isnull([DP1__],0) = 0 THEN...WHEN [DP1__] IS NULL THEN ...
  • 看起来每个人都发现了不同的错误,是的,有很多。
  • 这是非标准的 SQL 开头(例如 [..] 样式标识符,使用 " 表示字符串文字)。您使用的是哪个 DBMS?

标签: sql syntax case case-when


【解决方案1】:

我试着整理一下案例部分,我希望它有效。

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]

【讨论】:

    【解决方案2】:

    除了滥用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
    

    【讨论】:

      【解决方案3】:

      替换

      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) <> '%-%'
      

      【讨论】:

        【解决方案4】:

        你误用了撇号和括号

        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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-02-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-23
          相关资源
          最近更新 更多