次のSQLクエリがあります(簡略化):
UPDATE myTable
SET Phone1 = 049
,Phone2 = 123
,Class = --???
WHERE Project = 'ABC'
したがって、すべてのプロジェクト「ABC」にいくつかのデフォルト値を設定したいだけです。クラスフィールドについては、次のものが必要です。テーブルには、Class1 から Class5 までの 5 つのフィールドがあり、各フィールドには 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
しかし今、私はこれら2つのことを最良の方法で組み合わせる方法がわかりません. どうすればそれらを最良の方法で組み合わせることができますか?
現在の私の最善のアイデアは、スカラー値関数を作成して文字列を返すことです。