2015-12-04 89 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語句應該解決您的問題