name state
张三 未开始
张三 进行中
张三 未开始
李四 未开始
李四 未开始
王五 已完成
王五 已完成
王五 已完成
用一个包含group by name 的sql 写出如下sql(支持2000)name state
张三 进行中
李四 未开始
王五 已完成判断逻辑是 全部未开始就是未开始
全部已完成就是已完成
其它任何状态都是进行中。
张三 未开始
张三 进行中
张三 未开始
李四 未开始
李四 未开始
王五 已完成
王五 已完成
王五 已完成
用一个包含group by name 的sql 写出如下sql(支持2000)name state
张三 进行中
李四 未开始
王五 已完成判断逻辑是 全部未开始就是未开始
全部已完成就是已完成
其它任何状态都是进行中。
if object_id('tempdb.dbo.#tb') is not null drop table #tb
go
create table #tb (name varchar(4),state varchar(6))
insert into #tb
select '张三','未开始' union all
select '张三','进行中' union all
select '张三','未开始' union all
select '李四','未开始' union all
select '李四','未开始' union all
select '王五','已完成' union all
select '王五','已完成' union all
select '王五','已完成'select name ,
state=case when count(distinct state)>1 then '进行中'
when max(state)='未开始' then '未开始'
when max(state)='已完成' then '已完成'
end
from #tb
group by namename state
---- ------
李四 未开始
王五 已完成
张三 进行中(3 行受影响)
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([name] varchar(4),[state] varchar(6))
insert [tb]
select '张三','未开始' union all
select '张三','进行中' union all
select '张三','未开始' union all
select '李四','未开始' union all
select '李四','未开始' union all
select '王五','已完成' union all
select '王五','已完成' union all
select '王五','已完成'
---查询---
select name,
state=
case
when not exists(select 1 from tb where name=t.name and state!='已完成') then '已完成'
when not exists(select 1 from tb where name=t.name and state!='未开始') then '未开始'
else '进行中'
end
from tb t
group by name---结果---
name state
---- ------
李四 未开始
王五 已完成
张三 进行中(3 行受影响)