我现有的SQL语句
UPDATE EMP
SET fte_adj = IIf((fte<1 Or fte Is Null) And [employment category] Like '*Full-Time*',1,
IIf((fte=0 Or fte Is Null) And [employment category] Like '*Part-Time*',0.25,fte));
它将更新表EMP
set fte_adj=1
if Full time (and fte<1 or null)
set fte_adj=0.25
if part time (and fte=0 or null)
otherwise fte_adj=fte
如何添加案例以检查另一个表SEC_EMP
中是否存在employee_id的任何记录?
如果没有记录(0行),则set fte_adj=1
两个表都可以使用employee_id作为密钥
感谢
答案 0 :(得分:2)
我用CASE改写了你的陈述(但我意识到IIF在2012年有效):
UPDATE EMP
SET fte_adj =
CASE WHEN (FTE < 1 OR FTE IS NULL) AND [employment category] Like '*Full-Time*'
THEN 1
ELSE
CASE WHEN (FTE = 0 OR FTE IS NULL) AND [employment category] Like '*Part-Time*'
THEN 0.25
ELSE
CASE WHEN (SELECT COUNT(*) FROM SEC_EMP) = 0
THEN 1
ELSE
FTE
END
END
END
以下是一些示例Fiddle。
如果您更喜欢IIF逻辑,请转到:
UPDATE EMP
SET fte_adj =
IIF ( (FTE < 1 OR FTE IS NULL) AND [employment category] Like '*Full-Time*' , 1 ,
IIF ( (FTE = 0 OR FTE IS NULL) AND [employment category] Like '*Part-Time*' , 0.25,
IIF ( (SELECT COUNT(*) FROM SEC_EMP) = 0 , 1 , FTE )
)
)
更多Fiddle。
<强> - 编辑 - 强>
如果我了解最新评论,您想更新仅存在于SEC_EMP表中的记录吗?如果是这样,只需加入表格:
UPDATE E
SET fte_adj =
IIF ( (FTE < 1 OR FTE IS NULL) AND [employment category] Like '*Full-Time*' , 1 ,
IIF ( (FTE = 0 OR FTE IS NULL) AND [employment category] Like '*Part-Time*' , 0.25, FTE
)
)
FROM EMP E
JOIN SEC_EMP SE ON E.employee_id = SE.employee_id
更多Fiddle。
答案 1 :(得分:1)
试试这个:
UPDATE EMP
SET fte_adj = CASE WHEN fte=1 Or fte Is Not Null And [employment category] Like '%Full-Time%'
THEN 1 ELSE .25 END AS 'Rate'
我还要添加
WHERE [employment category] Like '%Full-Time%' OR [employment category] Like '%Part-Time%'
为了安全,取决于您的桌子。这适用于MS SQL btw,不知道'* syntax *'是什么。
答案 2 :(得分:0)
您可以使用IIF
语句添加EXISTS
,只要它是相关的:
IIF(NOT EXISTS(
SELECT [some column] FROM [some table]
WHERE [some condition]
), 1, [some value OR another IIF statement])
答案 3 :(得分:0)
sgeddes的case语句的更简单版本。
UPDATE EMP
SET fte_adj =
CASE WHEN (FTE < 1 OR FTE IS NULL) AND [employment category] Like '*Full-Time*'
THEN 1
WHEN (FTE = 0 OR FTE IS NULL) AND [employment category] Like '*Part-Time*'
THEN 0.25
WHEN (SELECT COUNT(*) FROM SEC_EMP) = 0
THEN 1
ELSE
FTE
END
与IF不同的案例陈述可以有多个分支。它们也会短路,所以第一个被击中的分支就是它。例如,
CASE WHEN 1=1
WHEN 2=2
END
永远不会超过1 = 1分支。