ID ER PR HER2
张三 + + -
张三 + - +
张三 - - +
李四 - - -
李四 - - -
王五 + + +
王五 - - +…………………………
如上表,有三个用户,对于任何一个用户,只要他某次ER或者PR或者HER2出现“+”,就把他的所有ER或者PR或者HER2设置成“+”,同时对有ER或者PR或者HERW为“+”的用户进行计数。
4 个解决方案
#1
你就说你想要什么结果吧,语言描述不如直接给数据结果。
#2
打个比方,对于ER这列,张三有三个值“+,+,-”,如果出现一次“+”,就将“-”的结果也变成“+“,执行后的结果张三的ER值变成“+,+,+”,并计数为一,依此类推
#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值变成“+,+,+”,并计数为一,依此类推
#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