【问题标题】:INSERT query with CASES that all share the same test statement使用所有共享相同测试语句的 CASES 进行 INSERT 查询
【发布时间】:2013-12-05 22:36:38
【问题描述】:

我有一个 INSERT INTO 查询,并且我有确定许多字段值的 CASE 语句。但是下面所有的测试语句都是一样的,有什么方法可以巩固一下吗?

field1 = CASE WHEN IID <> '\' THEN IID ELSE '' END 
field2 = CASE WHEN IID <> '\' THEN Left(IID, (InStrRev(IID, '\') - 1)) 
         ELSE '' END
field3 =  CASE WHEN IID <> '\' THEN Right(IID, (Len(IID) - InStrRev(IID, '\')))

【问题讨论】:

  • 如果InStrRev 符合我的想法,您可能只需要为field1 保留CASE。对于另外两个,CASE 应该没有效果,即你可以只拥有field2 = Left(...), field3 = Right(...)

标签: sql-server-2008 case insert-into


【解决方案1】:

CASE 是一个返回单个值的表达式(不是语句)。除了简化您正在检查的表达式之外,我想不出任何方法在这里完成合并。例如,您可以使用子查询或 CTE:

;WITH x AS 
(
  SELECT x = CASE WHEN IID <> '\' THEN 1 ELSE 0 END, other columns 
  FROM dbo.table
)
INSERT INTO ...
SELECT column1 = CASE x WHEN 1 THEN IID ELSE '' END,
       column2 = CASE x WHEN 1 THEN LEFT ...
...etc
FROM x;

【讨论】:

    猜你喜欢
    • 2020-04-07
    • 2016-11-14
    • 1970-01-01
    • 2018-02-03
    • 2019-04-20
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    • 2018-10-28
    相关资源
    最近更新 更多