如何使用if-else-if条件

时间:2018-03-14 16:04:31

标签: sql-server tsql

我是SQL Server的新手,也是学习阶段的新手。我想执行以下任务。

我有两个表Table1和Table2。我想循环Table1的行来检查值是否与Table2的任何行匹配。

表1:

ID    Name    Nationality   DOB     Priority
--------------------------------------------
1     Sujan    Nepali       1996     NULL
2     Sujan    Nepali       1999     NULL
3     Sujan    Chinese      1996     NULL
4     Sujan    Chinese      1888     NULL

表2:

ID    Name    Nationality   DOB     Address    Rank
---------------------------------------------------
1     Sujan    Nepali       1996    Kathmandu   1

在表1中,ID 1与表2中相同列名的所有值匹配。我需要将其优先级更新为1。

在ID 2中,DOB不同,名称和国籍匹配,因此将优先级更新为2。

在ID 3中,Name和Year与Table2相同,因此将优先级更新为3。

在ID 4中,只有名称相同,因此将优先级更新为4。

预期产出:

表1:

ID    Name    Nationality   DOB     Priority
---------------------------------------------
1     Sujan    Nepali       1996     1
2     Sujan    Nepali       1999     2
3     Sujan    Chinese      1996     3
4     Sujan    Chinese      1888     4

我使用CASE但需要使用IF ELSE IF条件执行。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

我想你需要这样的东西。交叉连接两个表并查找彼此匹配的列。根据那个更新。

declare @table1 table (ID int, Name varchar(100), Nationality varchar(100), DOB int, Priority int)
insert into @table1
values 
(1, 'Sujan', 'Nepali', 1996, NULL)
, (2, 'Sujan', 'Nepali', 1999, NULL)
, (3, 'Sujan', 'Chinese', 1996, NULL)
, (4, 'Sujan', 'Chinese', 1888, NULL)

declare @table2 table (ID int, Name varchar(100), Nationality varchar(100), DOB int, Address varchar(100), Rank int)
insert into @table2 values (1, 'Sujan', 'Nepali', 1996, 'Kathmandu', 1)

;with cte as (
select 
    a.*, rnk = row_number() over (order by case when a.Name = b.Name then 100 else 0 end
    + case when a.Nationality = b.Nationality then 10 else 0 end
    + case when a.DOB = b.DOB then 1 else 0 end desc)
from
    @table1 a
    join @table2 b on a.Name = b.Name
)

update cte
set priority = rnk

select * from @table1

这里是rextester demo

答案 1 :(得分:0)

除非这是作业,否则我认为没有理由使用if构造。

update table1 set priority = (
    select min(case
            when table2.id = table1.id and ... then 1
            when ... then 2
            when ... then 3
            ...
        end
    from table2
)

确保分支按优先顺序排列。