2015-03-02 107 views
0

只是想知道,是否有原因,为什么下面的代码不起作用?我试图更新2列值,如果他们达到多个标准,但我得到一个错误,说'关键字附近的错误语法'如果'和'总'附近的语法不正确。任何帮助非常感谢!if else语句设置条件(SQL)

update [dbo].[wages table] 
IF([criteria1]='AA1' and [criteria2]='50yrs and below' and [criteria3]= 'X<=50') 
set [Total ] = '0', [Employee ]='0' else 
if ([criteria1]='AA1' and [criteria2]='50yrs and below' and [criteria3]= 'X<=50') 
set [Total ] = '10', [Employee ]='10' else 
if ([criteria1]='AA1' and [criteria2]='50yrs and below' and [criteria3]= 'X<=50') 
set [Total ] = '20', [Employee ]='20' else 
if ([criteria1]='AA1' and [criteria2]='50yrs and below' and [criteria3]= 'X<=50') 
set [Total ] = '30', [Employee ]='30' else 
set [Total ] = 'NULL', [Employee ]='NULL' 
+0

是条件'如果([标准1] = 'AA1' 和[criteria2] = '50yrs和下方的' 和[criteria3] = 'X <= 50')'相同对全部? – 2015-03-02 09:44:27

+1

您使用的是哪种数据库平台? SQL Server,Oracle等。 – 2015-03-02 09:46:05

+0

使用CASE(表达式)。 – jarlh 2015-03-02 09:47:21

回答

1

我想这是你正在尝试做的:

UPDATE [dbo].[wages table] 
    SET [Total] = CASE [criteria3] WHEN 'X<=50' THEN '0' ELSE 'NULL' END, 
    SET [Employee] = CASE [criteria3] WHEN = 'X<=50' THEN '0' ELSE 'NULL' END 
WHERE [criteria1]='AA1' and [criteria2]='50yrs and below' 

如果criteria1criteria2是相同的所有那么您可以在WHERE条款检查。我相信区别在于criteria3

是这样的:

UPDATE [dbo].[wages table] 
    SET [Total] = CASE [criteria3] WHEN 'X<=50' THEN '0' WHEN 'X<=40' THEN 1 WHEN 'X<=30' THEN 3 ELSE 'NULL' END, 
    SET [Employee] = CASE [criteria3] WHEN 'X<=50' THEN '0' WHEN 'X<=40' THEN 1 WHEN 'X<=30' THEN 3 ELSE 'NULL' END 
WHERE [criteria1]='AA1' and [criteria2]='50yrs and below' 
2

SQL您可以在CASE表达这种类型的语句:

UPDATE [dbo].[wages table] 
SET [Total] = CASE WHEN ([criteria1]='AA1' AND [criteria2]='50yrs and below' AND [criteria3]= 'X<=50') THEN '0' 
        WHEN ([criteria1]='AA1' AND [criteria2]='50yrs and below' AND [criteria3]= 'X<=50') THEN '0' 
        WHEN ([criteria1]='AA1' AND [criteria2]='50yrs and below' AND [criteria3]= 'X<=50') THEN '0' 
        ELSE NULL END, 
    [Employee ] = CASE WHEN ([criteria1]='AA1' AND [criteria2]='50yrs and below' AND [criteria3]= 'X<=50') THEN '0' 
        WHEN ([criteria1]='AA1' AND [criteria2]='50yrs and below' AND [criteria3]= 'X<=50') THEN '0' 
        WHEN ([criteria1]='AA1' AND [criteria2]='50yrs and below' AND [criteria3]= 'X<=50') THEN '0' 
        ELSE NULL END 

除此之外,我看不到你的情况有什么区别。

+0

我可以在一行中设置2个值,而不是再次复制条件语句吗?我的情况在现实中是不同的。 – Laughy 2015-03-02 09:57:55

+0

@Laughy,不,你不能 – 2015-03-02 10:01:54