T-SQL中是否有办法使用case语句来查看逻辑,如果行满足条件,则它不会为case
语句的其余部分计算该行。(就像C++的休息(
例如:
Case When X is true Then scenario A
Case when Y is true Then scenario B
Case when Z is true Then scenario C
第 1 行 - 如果场景 A 为真(但也可能是场景 B(,我想发生的是,对于第一行,我们标记行 A,并跳过评估其余情况。然后我们转到第 2 行等。
-我应该添加案例语句是为了更新 - 这是数据的示例。
set [fixed_brand_new] =
CASE WHEN ((CustCount = 1 AND src.order_fix_or_flex = 'fx'))
OR
(CustCount > 2 AND src.order_fx_or_fl = 'fx' AND GapDiff2 is NULL)
OR
(CustCount = 2 AND src.order_fx_or_fl = 'fx' AND season_counter = MaxSeasonCounter AND GapDiff2 is NULL )
THEN 'Y' ELSE '' END,
[flex_brand_new] =
CASE WHEN ((CustCount = 1 AND src.order_fx_or_fl = 'fl'))
OR
(CustCount > 2 AND src.order_fx_or_fl = 'fl' AND GapDiff2 is NULL)
OR
(CustCount = 2 AND src.order_fx_or_fl = 'fl' AND src.season_counter = MaxSeasonCounter AND GapDiff2 is NULL )
THEN 'Y' ELSE '' END,
CASE 语句,当同时计算多个列时,首先返回 WHEN 以 TRUE 求值。 此示例应演示其工作原理:
DECLARE @TestData TABLE
(
[X] BIT
, [Y] BIT
, [Z] BIT
);
INSERT INTO @TestData (
[X]
, [Y]
, [Z]
)
VALUES ( 1, 1, 0 )
, ( 0, 1, 1 )
, ( 0, 1, 0 )
, ( 0, 0, 1 );
SELECT *
, CASE WHEN [X] = 1 THEN 'Scenario: A x=1 others don''t matter'
WHEN [Y] = 1 THEN 'Scenario: B x=0 and y=1, what Z is doesn''t matter'
WHEN [Z] = 1 THEN 'Scenario: C x=0 and y=0 and z=1'
END EvaluateTogether
, CASE WHEN [X] = 1 THEN 'Scenario A'
END --Evalute each individual column as another column
, CASE WHEN [Y] = 1 THEN 'Scenario B'
END --Evalute each individual column as another column
, CASE WHEN [Z] = 1 THEN 'Scenario C'
END --Evalute each individual column as another column
FROM @TestData;