[英]How to write case for empty record in sql
我有兩個桌子
Employee 1
Emp_Id Name Old_Id
111 Hemant 1
222 Sachin 2
雇員
Emp_ID Name Temp_Name
1 Hemant NULL
2 Sachin NULL
3 Vinod NULL
4 Nitin 1
5 Ajit 2
6 Suraj 3
我想用Employee1表中可用的新值替換Employee表中的Temp_Name。
Employee.Temp_Name是Employee1.Old_Id
條件
1:如果Employee1.Old_id列中不存在Temp_Name,則應保留它。
2:不創建任何功能。
最終輸出應為:
雇員
Emp_ID Name Short_Name
1 Hemant NULL
2 Sachin NULL
3 Vinod NULL
4 Nitin 111
5 Ajit 222
6 Suraj 3
我試過了
Update [Employee]
set
Temp_Name = (
select CASE Emp_ID
WHEN NULL THEN [Employee].Temp_Name
ELSE Emp_ID
END AS Emp_ID
from [Employee1] e1
where e1.old_id = [Employee].Temp_Name
)
但這給了我輸出:
雇員
Emp_ID Name Temp_Name
1 Hemant NULL
2 Sachin NULL
3 Vinod NULL
4 Nitin 111
5 Ajit 222
6 Suraj NULL
您可以將LEFT JOIN
與CASE
表達式結合使用。
SELECT
e.Emp_Id,
e.Name,
Short_Name =
CASE
WHEN e1.Old_Id IS NOT NULL THEN e1.Emp_Id
ELSE e.Short_Name
END
FROM Employee e
LEFT JOIN Employee1 e1
ON e1.Old_Id = e.Short_Name
UPDATE
語句
UPDATE e
SET e.Short_Name = e1.Emp_Id
FROM Employee e
LEFT JOIN Employee1 e1
ON e1.Old_Id = e.Short_Name
WHERE e1.Old_Id IS NOT NULL
編輯:這是為SQL Server。
這是插入示例數據的代碼:
begin tran
create table Employee1
(
Emp_Id int,
Name varchar(50),
Old_Id int
);
create table Employee
(
Emp_Id int,
Name varchar(50),
Short_Name int NULL
);
insert into Employee1
values(111, 'Hemant', 1);
insert into Employee1
values(222, 'Sachin', 2);
insert into Employee
values(1, 'Hemant', NULL);
insert into Employee
values(2, 'Sachin', NULL);
insert into Employee
values(3, 'Vinod', NULL);
insert into Employee
values(4, 'Nitin', 1);
insert into Employee
values(5, 'Ajit', 2);
insert into Employee
values(6, 'Suraj', 3);
update emp
set
emp.Short_Name = CASE
WHEN emp1.Emp_Id IS NULL THEN emp.Short_Name
ELSE emp1.Emp_Id
END
from
Employee emp
left join Employee1 emp1
on (emp.Short_Name = emp1.Old_Id)
select * From Employee
drop table Employee1
drop table Employee
rollback
您必須確保退出聯接表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.