【问题标题】:Multiple Case Statements With Identical Expressions具有相同表达式的多个 case 语句
【发布时间】:2018-04-30 06:29:31
【问题描述】:

我正在尝试评估特定列以返回五个不同的列 - 但这些列基于 CASE 语句中的相同表达式。

     CASE WHEN va.HIN LIKE '%[-=!@#$%^&*()<>?:|\;./,]%' THEN 1
          ELSE 0
     END AS [Invalid] ,
     CASE WHEN va.HIN LIKE '%[-=!@#$%^&*()<>?:|\;./,]%' THEN 0
          ELSE 1
     END AS [validMICcode] ,
     CASE WHEN va.HIN LIKE '%[-=!@#$%^&*()<>?:|\;./,]%' THEN 0
          ELSE 1
     END AS [validSerialNumber] ,
     CASE WHEN va.HIN LIKE '%[-=!@#$%^&*()<>?:|\;./,]%' THEN 0
          ELSE 1
     END AS [validFormat] ,
     CASE WHEN va.HIN LIKE '%[-=!@#$%^&*()<>?:|\;./,]%' THEN 0
          ELSE 1
     END AS [validProductionYear] ,

我觉得导致有问题的表/列被搜索五次,但我无法弄清楚如何重写它 - 或者是否有可能 - 进行一次模式搜索并根据一次搜索。

我正在尝试不同的变体,但我无法为这个问题想出正确的语法:

CASE WHEN va.HIN LIKE '%[-=!@#$%^&*()<>?:|\;./,]%' THEN 1
          ELSE 0          
            CASE WHEN 1 THEN 1 END AS [Invalid]
            CASE WHEN 0 THEN 0 END AS [validMICode]
            CASE WHEN 0 THEN 0 END AS AS [validSerialNumber]
            CASE WHEN 0 THEN 0 END AS AS [validFormat]
            CASE WHEN 0 THEN 0 END AS AS [validProductionYear]
    END

【问题讨论】:

  • 这对你有用吗?

标签: tsql case sql-server-2014


【解决方案1】:

一种方法是子查询和按位非。

select
    result Invalid,
    ~result validMICcode,
    ~result validSerialNumber,
    ~result validFormat,
    ~result validProductionYear
from
(

   select 
     CASE WHEN va.HIN LIKE '%[-=!@#$%^&*()<>?:|\;./,]%' 
       THEN CAST(1 As bit) 
       ELSE CAST(0 As bit) 
     End result 
   from ...
) tbl

【讨论】:

    【解决方案2】:

    你可以用 CTE 做到这一点..

    with cte as(
    select *,
    CASE 
       WHEN va.HIN LIKE '%[-=!@#$%^&*()<>?:|\;./,]%' 
          THEN 1
          ELSE 0  
    END as SomeColumn)
    
    select *,
                CASE WHEN SomeColumn = 1 THEN 1 END AS [Invalid]
                CASE WHEN SomeColumn = 0 THEN 0 END AS [validMICode]
                ...
    from cte
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多