如何对一张表中同一个ID的几行数据进行查询,查出任何一个有A,就把这个ID的这列的数据全替换成B

时间:2023-01-21 20:11:35
比如我有一张Table A
ID    ER    PR    HER2
张三  +     +      -
张三  +     -      +
张三  -     -      +
李四  -     -      -
李四  -     -      -
王五  +     +      +
王五  -     -      +…………………………
如上表,有三个用户,对于任何一个用户,只要他某次ER或者PR或者HER2出现“+”,就把他的所有ER或者PR或者HER2设置成“+”,同时对有ER或者PR或者HERW为“+”的用户进行计数。

4 个解决方案

#1


你就说你想要什么结果吧,语言描述不如直接给数据结果。

#2


打个比方,对于ER这列,张三有三个值“+,+,-”,如果出现一次“+”,就将“-”的结果也变成“+“,执行后的结果张三的ER值变成“+,+,+”,并计数为一,依此类推
引用 1 楼 ssp2009 的回复:
你就说你想要什么结果吧,语言描述不如直接给数据结果。

#3


select id,ER=(select max(ER) from tb where id=a.id order by ER),
          ERcount=(select count(*) from tb where id=a.id and ER='-')
from tb a

#4


 

--插入测试数据
create table #a(id varchar(30),er varchar(10),pr varchar(10),her2 varchar(10))
insert into #a values('张三', '+', '+',' -')
insert into #a values('张三' ,'+ ','-',' +')
insert into #a values('张三', '- ','- ','+')
insert into #a values('李四' ,'-', '-',' -')
insert into #a values('李四' ,'-', '-',' -')
insert into #a values('王五' ,'+ ','+',' +')
insert into #a values('王五' ,'-', '-',' +')

--更新数据,凡是有'+'则全部为'+'
update #a
set er='+',pr='+',her2='+'
where id in
(
select
      case when SUM(tt.er)+SUM(tt.pr)+SUM(tt.her2)=0 then '' else id end
      
from
(
select
      tt.id as id
      ,case when tt.er='+' then 1 else 0 end as er
      ,case when tt.pr='+' then 1 else 0 end as pr
      ,case when tt.her2='+' then 1 else 0 end as her2
from
     #a tt
) tt
group by
        tt.id
)
--查看计数
select 
      id
      ,COUNT(id) as num
from 
     #a
where 
     er='+'
group by
     id

#1


你就说你想要什么结果吧,语言描述不如直接给数据结果。

#2


打个比方,对于ER这列,张三有三个值“+,+,-”,如果出现一次“+”,就将“-”的结果也变成“+“,执行后的结果张三的ER值变成“+,+,+”,并计数为一,依此类推
引用 1 楼 ssp2009 的回复:
你就说你想要什么结果吧,语言描述不如直接给数据结果。

#3


select id,ER=(select max(ER) from tb where id=a.id order by ER),
          ERcount=(select count(*) from tb where id=a.id and ER='-')
from tb a

#4


 

--插入测试数据
create table #a(id varchar(30),er varchar(10),pr varchar(10),her2 varchar(10))
insert into #a values('张三', '+', '+',' -')
insert into #a values('张三' ,'+ ','-',' +')
insert into #a values('张三', '- ','- ','+')
insert into #a values('李四' ,'-', '-',' -')
insert into #a values('李四' ,'-', '-',' -')
insert into #a values('王五' ,'+ ','+',' +')
insert into #a values('王五' ,'-', '-',' +')

--更新数据,凡是有'+'则全部为'+'
update #a
set er='+',pr='+',her2='+'
where id in
(
select
      case when SUM(tt.er)+SUM(tt.pr)+SUM(tt.her2)=0 then '' else id end
      
from
(
select
      tt.id as id
      ,case when tt.er='+' then 1 else 0 end as er
      ,case when tt.pr='+' then 1 else 0 end as pr
      ,case when tt.her2='+' then 1 else 0 end as her2
from
     #a tt
) tt
group by
        tt.id
)
--查看计数
select 
      id
      ,COUNT(id) as num
from 
     #a
where 
     er='+'
group by
     id