请帮助创建包含许多字段的表。而且我需要在每个字段上执行多个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
答案 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 . . . );
使用表格的任何人都可以使用。