现在 我有一个表
供应商 店铺 作业状态
A 3 0
A 3 1
A 3 2
A 3 3
B 3 0
B 3 2
B 3 3
B 4 0
B 4 0
C 5 3
C 5 3
C 5 3
D 6 1
D 6 2
D 6 3求供应商 店铺别的状态
其中 如果一个供应商 一个店铺 的所有 作业状态 如果全部是 0 的话 那么 就是 作业中
如果 一个供应商 一个店铺 的所有 作业状态 全部是 3的话 那么就是 作业完了
如果是 其他的话 就是 作业中
上表 得出的 结果 应是
A 3 作业中
B 3 作业中
B 4 未作业
C 5 作业完了
D 6 作业中
求 SQL????
供应商 店铺 作业状态
A 3 0
A 3 1
A 3 2
A 3 3
B 3 0
B 3 2
B 3 3
B 4 0
B 4 0
C 5 3
C 5 3
C 5 3
D 6 1
D 6 2
D 6 3求供应商 店铺别的状态
其中 如果一个供应商 一个店铺 的所有 作业状态 如果全部是 0 的话 那么 就是 作业中
如果 一个供应商 一个店铺 的所有 作业状态 全部是 3的话 那么就是 作业完了
如果是 其他的话 就是 作业中
上表 得出的 结果 应是
A 3 作业中
B 3 作业中
B 4 未作业
C 5 作业完了
D 6 作业中
求 SQL????
--创建测试数据
CREATE TABLE #TB
(SUB VARCHAR(10),STORE INT,STATE INT)INSERT #TB
SELECT 'A',3,0
UNION ALL
SELECT 'A',3,1
UNION ALL
SELECT 'A',3,2
UNION ALL
SELECT 'A',3,3
UNION ALL
SELECT 'B',3,0
UNION ALL
SELECT 'B',3,2
UNION ALL
SELECT 'B',3,3
UNION ALL
SELECT 'B',4,0
UNION ALL
SELECT 'B',4,0
UNION ALL
SELECT 'C',5,3
UNION ALL
SELECT 'C',5,3
UNION ALL
SELECT 'C',5,3
UNION ALL
SELECT 'D',6,1
UNION ALL
SELECT 'D',6,2
UNION ALL
SELECT 'D',6,3
--查询
SELECT SUB,STORE,
CASE SUM(STATE)/COUNT(*) WHEN 0 THEN '未作业' WHEN 3 THEN '作业完成' ELSE '作业中' END AS ZYZT
FROM #TB
GROUP BY SUB,STORE
select a.供应商,a.店铺,isnull(b.c1,'作业中') as 作业状态 from
(
select 供应商,店铺,sum(作业状态) as 作业状态,count(*) as 个数
from @t group by 供应商,店铺
)
a left join
(select 0 as id,'未作业' as c1 union all select 3,'作业完了')
b on a.作业状态/个数=b.id
/*
供应商 店铺 作业状态
---- ----------- --------
A 3 作业中
B 3 作业中
B 4 未作业
C 5 作业完了
D 6 作业中
*/
select [供应商],[店铺],
case when sum([作业状态])=0 then '作业没开始'
when sum([作业状态])/count(1)=3 then '作业完了'
else '作业中' end as '作业状态'
from tb_name
group by [供应商],[店铺]
CREATE TABLE tb
(SUB VARCHAR(10),STORE INT,STATE INT)
set nocount on
INSERT tb
SELECT 'A',3,0
UNION ALL
SELECT 'A',3,1
UNION ALL
SELECT 'A',3,2
UNION ALL
SELECT 'A',3,3
UNION ALL
SELECT 'B',3,0
UNION ALL
SELECT 'B',3,2
UNION ALL
SELECT 'B',3,3
UNION ALL
SELECT 'B',4,0
UNION ALL
SELECT 'B',4,0
UNION ALL
SELECT 'C',5,3
UNION ALL
SELECT 'C',5,3
UNION ALL
SELECT 'C',5,3
UNION ALL
SELECT 'D',6,1
UNION ALL
SELECT 'D',6,2
UNION ALL
SELECT 'D',6,3
set nocount off
goselect sub,store,
(case when count(*) = (select count(*) from tb where sub = t.sub and store = t.store and state = 0) then '未作业'
when count(*) = (select count(*) from tb where sub = t.sub and store = t.store and state = 3) then '作业完'
else '作业中' end)
from tb t
group by sub,storedrop table tb/********sub store
---------- ----------- ------
A 3 作业中
B 3 作业中
B 4 未作业
C 5 作业完
D 6 作业中(5 行受影响)
(SUB VARCHAR(10),STORE INT,STATE INT)INSERT #TB
SELECT 'A',3,0
UNION ALL
SELECT 'A',3,1
UNION ALL
SELECT 'A',3,2
UNION ALL
SELECT 'A',3,3
UNION ALL
SELECT 'B',3,0
UNION ALL
SELECT 'B',3,2
UNION ALL
SELECT 'B',3,3
UNION ALL
SELECT 'B',4,0
UNION ALL
SELECT 'B',4,0
UNION ALL
SELECT 'C',5,3
UNION ALL
SELECT 'C',5,3
UNION ALL
SELECT 'C',5,3
UNION ALL
SELECT 'D',6,1
UNION ALL
SELECT 'D',6,2
UNION ALL
SELECT 'D',6,3
--查询
SELECT SUB,STORE,
CASE SUM(STATE)/COUNT(*) WHEN 0 THEN '未作业'
WHEN 3 THEN '作业完成'
ELSE '作业中' END AS ZYZT
FROM #TB
GROUP BY SUB,STORE/*
SUB STORE ZYZT
---------- ----------- --------
A 3 作业中
B 3 作业中
B 4 未作业
C 5 作业完成
D 6 作业中(5 行受影响)