多个案例陈述-函数/过程

时间:2018-11-28 08:43:36

标签: sql sql-server tsql

请帮助创建包含许多字段的表。而且我需要在每个字段上执行多个case语句。请帮助我以一种干净的方式(函数/存储过程)来执行此操作,而不是一遍又一遍地编写case语句。 下面是一个示例SQL。

SELECT
COALESCE(CASE WHEN Col1 = 'XXX' THEN 'YYY' ELSE NULL END,
         CASE WHEN Col1 IN ('AAA','BBB') AND Col2 IS NULL THEN 'ZZZ' ELSE NULL END,
         CASE WHEN Col1 = 'CCC' THEN 'DDD' ELSE Col2 END ) AS col_i
.
.
.
.
.
.
.
FROM table

2 个答案:

答案 0 :(得分:0)

我认为我们可以将您的逻辑重写为单个CASE表达式:

CASE WHEN Col1 = 'XXX'
     THEN 'YYY'
     WHEN Col1 IN ('AAA', 'BBB') AND Col2 IS NULL
     THEN 'ZZZ'
     WHEN Col1 = 'CCC'
     THEN 'DDD'
     ELSE Col2 END

使这项工作有效的原因是您的ELSE值是NULL(最后一个CASE表达式除外),从逻辑上讲,这意味着COALESCE只会翻转到下一个CASE表达式。

答案 1 :(得分:0)

在单个查询中,您可以使用apply(或子查询或CTE):

SELECT v.col_i
FROM table t CROSS APPLY
     (VALUES (CASE . . . )
     ) v(col_i)

如果您希望将其普遍使用,请不要使用函数,而应使用计算列:

alter table t add col_i as
     (case . . . );

使用表格的任何人都可以使用。