你能在 T-SQL 案例语句中休息一下吗?



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;

最新更新