Sql server 在SQL Server中交换行值
我对SQL Server有疑问 来源:Sql server 在SQL Server中交换行值,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我对SQL Server有疑问 来源:emp id | name | check |deptname 100 | a | 1 |ceo 100 | b | 2 |hr 100 | c | 3 |po 100 | d | 5 |no 101 | a | 1 |pm 101 | b | 5 |ceo 102 | a |
emp
id | name | check |deptname
100 | a | 1 |ceo
100 | b | 2 |hr
100 | c | 3 |po
100 | d | 5 |no
101 | a | 1 |pm
101 | b | 5 |ceo
102 | a | 1 |rn
102 | b | 2 |han
在这里,相同的id有检查2和5个值,然后我们需要将该id的检查值替换为2个检查值
基于上表,我希望将数据加载/输出到目标表中,如下所示
目标:emp1
id | name | check |deptname
100 | a | 1 |ceo
100 | d | 2 |hr
100 | c | 3 |po
101 | a | 1 |pm
101 | b | 5 |ceo
102 | a | 1 |rn
102 | b | 2 |han
我试着像下面一样
select
a1.id,
a1.name,
isnull(a2.[check],a1.[check]) as [check]
from
emp as a1
left outer join
emp as a2 on a2.id = a1.id
and a1.[check] in (2,5)
and a2.[check] in (2,5)
and a2.[check] <> a1.[check]
where
a2.id is null
or (a1.[check] = 5
and a2.[check] = 2)
选择
a1.id,
a1.姓名,
isnull(a2.[check],a1.[check])作为[check]
从…起
emp as a1
左外连接
a2.id=a1.id上作为a2的emp
和a1。[签入]入(2,5)
和a2。[签入]in(2,5)
和a2.[检查]a1.[检查]
哪里
a2.id为空
或(a1.[检查]=5
和a2。[检查]=2)
该查询没有返回正确的结果
请告诉我如何编写查询以在SQL Server中获得预期的输出
select
e1.id,
isnull(e2.name, e1.name) as name,
e1.[check],
e1.deptname
from emp e1
left outer join emp e2
on e2.id = e1.id and e1.[check] = 2 and e2.[check] = 5
where
not exists (select 1 from emp e3 where e3.id = e1.id and
e1.[check] = 5 and e3.[check] = 2)
例如,在中,您的问题说要更改“check”值,但实际上您正在更改名称,因为deptname保留在值为2的行中。