Case语句-sql中的多个条件

问题描述 投票:0回答:3
DECLARE @TAB TABLE (SKU INT,    
                    SP FLOAT,   
                    STDC FLOAT,
                    REPC FLOAT,
                    TRUEMAR FLOAT,
                    BRANMAR FLOAT,
                    comment VARCHAR (100)
                   )

INSERT INTO @TAB
    SELECT 40410, 24.34, 23.895, 19.91, 18.2, 1.83, NULL 
    UNION ALL
    SELECT 40410, 25.61, 23.895, 19.91, 22.26, 6.7, NULL 
    UNION ALL
    SELECT 40410, 24.95, 23.895, 19.91, 20.2, 44.23, NULL 
    UNION ALL
    SELECT 40410, 25.29, 23.895, 19.91, 21.27, 5.52, NULL

当TRUEMAR小于0.10时,Comment列应为UR

当TRUEMAR大于0.10且BARMAR小于0.10然后PMR

或者NA

不幸的是,下面的代码返回全部为NA。

UPDATE @TAB                     
SET Comment = CASE                          
                 WHEN [TRUEMAR] < 0.10 THEN 'UR'                        
                 WHEN [TRUEMAR] > 0.10 and BRANMAR < 0.10 THEN 'PMR'
                 ELSE 'NA'
              END

请分享您的建议。

谢谢

sql sql-server
3个回答
0
投票

你看起来很好。插入一些与查询中给出的条件匹配的正确数据。请检查一下 -

DECLARE @TAB TABLE
(
    SKU INT,    
    SP FLOAT,   
    STDC    FLOAT,
    REPC    FLOAT,
    TRUEMAR FLOAT,
    BRANMAR FLOAT,
    comment VARCHAR (100)
)

INSERT @TAB

SELECT 40410,   24.34,  23.895, 19.91,  18.2,   1.83,NULL UNION ALL
SELECT 40410,   25.61,  23.895, 19.91,  22.26,  6.7,NULL UNION ALL
SELECT 40410,   24.95,  23.895, 19.91,  20.2,   44.23,NULL UNION ALL
SELECT 40410,   25.29,  23.895, 19.91,  21.27,  5.52,NULL UNION ALL
SELECT 40410,   25.29,  23.895, 19.91,  21.27,  0.08,NULL

select * , CASE                                 
                WHEN [TRUEMAR] > 0.10 and BRANMAR <0.10 THEN 'PMR'  
                WHEN [TRUEMAR] < 0.10 THEN 'UR'                     
                ELSE 'NA'
            END
FROM @TAB

OUTPUT

/*------------------------
OUTPUT
------------------------*/

(5 row(s) affected)
SKU         SP                     STDC                   REPC                   TRUEMAR                BRANMAR                comment       
----------- ---------------------- ---------------------- ---------------------- ---------------------- ---------------------- ------------- ----
40410       24.34                  23.895                 19.91                  18.2                   1.83                   NULL          NA
40410       25.61                  23.895                 19.91                  22.26                  6.7                    NULL          NA
40410       24.95                  23.895                 19.91                  20.2                   44.23                  NULL          NA
40410       25.29                  23.895                 19.91                  21.27                  5.52                   NULL          NA
40410       25.29                  23.895                 19.91                  21.27                  0.08                   NULL          PMR

(5 row(s) affected)

0
投票

您的第一个案例检查[TRUEMAR] <0.10并且没有满足条件的记录。

第二种情况检查[TRUEMAR]> 0.10 AND BRANMAR <0.10。所以,即使有记录满足[TRUEMAR]> 0.10,他们也不会通过BRANMAR的第二个条件

这就是为什么你的条件都失败并且你得到了默认值

enter image description here

如果您更改第二种情况,它将为您提供PMR的价值

UPDATE @TAB                     
SET Comment = CASE                          
                 WHEN ISNULL([TRUEMAR],0.00) < 0.10 THEN 'UR'                        
                 WHEN ISNULL([TRUEMAR],0.00) > 0.10 OR BRANMAR < 0.10 THEN 'PMR'
                 ELSE 'NA'
              END

但由于这不是你的要求,你得到的结果是正确的。请确保您的输入值正确无误


0
投票

这样你的输入数据就可以得到那个结果。

INSERT @TAB
SELECT 40410,   24.34,  23.895, 19.91,  0.09,   1.83,NULL UNION ALL
SELECT 40410,   25.61,  23.895, 19.91,  0.11,  0.09,NULL UNION ALL
SELECT 40410,   24.95,  23.895, 19.91,  20.2,   44.23,NULL UNION ALL
SELECT 40410,   25.29,  23.895, 19.91,  21.27,  5.52,NULL
© www.soinside.com 2019 - 2024. All rights reserved.