簡體   English   中英

如何在SQL中為空記錄編寫大小寫

[英]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 JOINCASE表達式結合使用。

SQL小提琴

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM