Case语句中的多个条件-sql

时间:2018-01-03 11:29:36

标签: sql sql-server

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时,注释列应为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

请分享您的建议。

由于

3 个答案:

答案 0 :(得分: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
------------------------*/

(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)

答案 1 :(得分: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

答案 2 :(得分:0)

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

第二种情况检查[TRUEMAR]&gt; 0.10 AND BRANMAR&lt; 0.10。即使有记录满足[TRUEMAR]&gt; 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

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