现在 我有一个表
供应商  店铺  作业状态 
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????

解决方案 »

  1.   


    --创建测试数据
    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
      

  2.   


    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           作业中
    */
      

  3.   


        select [供应商],[店铺],
         case when sum([作业状态])=0 then '作业没开始'
              when sum([作业状态])/count(1)=3 then '作业完了'
              else '作业中' end as '作业状态'
        from tb_name 
        group by [供应商],[店铺]
      

  4.   


    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 行受影响)
      

  5.   

    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/*
    SUB        STORE       ZYZT
    ---------- ----------- --------
    A          3           作业中
    B          3           作业中
    B          4           未作业
    C          5           作业完成
    D          6           作业中(5 行受影响)
      

  6.   

     left jion  一楼已经很明白了。。