我有以下 SQL 查询(简化):
UPDATE myTable
SET Phone1 = 049
,Phone2 = 123
,Class = --???
WHERE Project = 'ABC'
所以我只想为每个项目“ABC”设置一些默认值。对于 Class 字段,我想要以下内容:表中有 5 个其他字段,Class1 到 Class5,每个字段包含 1 或 0。如果 Class1 为 1,则 Class 应包含“C1”。如果 Class1 和 Class3 包含 1,则 Class 应为“C1 + C3”。如果所有 ClassN 字段都包含 1,则应为“C1 + C2 + C3 + C4 + C5”,依此类推。
现在这也不太难:
DECLARE @Class NVARCHAR(100)
DECLARE @Class1 INT = 0
DECLARE @Class2 INT = 0
DECLARE @Class3 INT = 0
DECLARE @Class4 INT = 0
DECLARE @Class5 INT = 0
SET @Class = CASE
WHEN ISNULL(@Class1, 0) = 1
THEN 'C1 + '
ELSE ''
END
SET @Class = ISNULL(@Class, '') + CASE
WHEN ISNULL(@Class2, 0) = 1
THEN 'C2 + '
ELSE ''
END
SET @Class = ISNULL(@Class, '') + CASE
WHEN ISNULL(@Class3, 0) = 1
THEN 'C3 + '
ELSE ''
END
SET @Class = ISNULL(@Class, '') + CASE
WHEN ISNULL(@Class4, 0) = 1
THEN 'C4 + '
ELSE ''
END
SET @Class = ISNULL(@Class, '') + CASE
WHEN ISNULL(@Class5, 0) = 1
THEN 'C5 + '
ELSE ''
END
-- Remove last +
IF (LEN(@Class) > 0)
SET @Class = LEFT(ISNULL(@Class, ''), LEN(@Class) - 2)
SELECT @Class
但现在我只是不确定如何以最好的方式将这两件事结合起来。我怎样才能以最好的方式将它们结合起来?
我现在最好的想法是创建一个标量值函数并返回字符串。