2015-12-04 54 views
1

嗨,我有类似下面的SAP HANA表工作:SQL:有条件的插入/更新

Outcome Value Rating 
Yes  0  null 
Yes  20  null 
No  -16  null 

我需要有条件地填充等级列,这样,如果:

Value > 15; Rating = 'High" 
-15 <= Value <= 15; Rating = 'Medium" 
Value < -15; Rating = 'Low" 

无论如何,我可以使用INSERT或UPDATE语句来做到这一点?

+1

你尝试过这么远吗?例如,如果您在线搜索“SQL条件插入”[您可能会发现一些有用的信息](http://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html)。 – miken32

+1

你正在使用哪个数据库? –

+0

我在SAP HANA首次尝试为数据挖掘处理数据,我的SQL相当薄弱,因为我从来没有用过它。 –

回答

0

如果您使用MSSQL,这是为CASE声明一个良好的使用:

RATING = CASE 
      WHEN Value > 15 THEN 'High' 
      WHEN Value BETWEEN -15 AND 15 THEN 'Medium' 
      ELSE 'Low' 
     END 

这假定Value是一个int,而不是其他类型。

INSERT声明

例子:

DECLARE @Value int = 10, 
     @Rating varchar(10) 

SELECT @Rating = CASE 
        WHEN @Value > 15 THEN 'High' 
        WHEN @Value BETWEEN -15 AND 15 THEN 'Medium' 
        ELSE 'Low' 
        END 

INSERT INTO Table 
    (Outcome, Value, Rating) 
SELECT 
    Outcome = 'Yes', 
    Value = @Value, 
    Rating = @Rating 

UPDATE

UPDATE Table 
SET  Rating = CASE 
        WHEN Value > 15 THEN 'High' 
        WHEN Value BETWEEN -15 AND 15 THEN 'Medium' 
        ELSE 'Low' 
       END 
WHERE UniqueID = 1 
+0

以及如何在插入查询中使用这种情况? –

+0

@MohamedElHousseine我添加了一个例子。如果你想内联使用它,这取决于你如何接收数据。 – levelonehuman

0

您可以使用mysql程序来处理的条件代码,这里是你正在寻找的程序的例子。

CREATE FUNCTION `myfunc` (`value` INT) RETURNS VARCHAR(10) 
IF value >=15 THEN RETURN 'High'; 
ELSEIF value >= -15 AND value <15 THEN RETURN 'Medium'; 
ELSEIF value < -15 THEN RETURN 'Low'; 
END IF ; 

,你可以在你的MySQL代码中使用这个程序像

INSERT INTO `table_name` VALUES('Yes',5,myfunc(5)) 
0
update table_name set Rating = case when Value<-15 then 'low' when 
(Value>-15 and Value<15) then 'medium' when Value>15 then 'high' end 

使用情况与update语句应该解决您的问题