表结构如下
name      code    flag
测试01   测试01    0
测试01   测试01    1
测试01   测试01    1
测试01   测试01    0
测试01   测试01    0
测试02   测试02    0
测试02   测试02    1
测试02   测试02    0
测试02   测试02    0
  如何查出来结果如下
name      code    flag=0条数  flag=1条数  
测试01   测试01    3            2
测试02   测试02    3            1

解决方案 »

  1.   

    select name,code
    ,sum(case when flag=0 then 1 else 0 end) as [flag=0条数]
    ,sum(case when flag=1 then 1 else 0 end) as [flag=1条数]
    from tab
    group by name,code
      

  2.   


    select name,code,sum(case when flag=0 then 1 else 0 end) cntf0,
                     sum(case when flag=1 then 1 else 0 end) cntf1
    from tb
    group by name,code
      

  3.   

    select
     name,code,
     sum(case when flag=0 then 1 else 0 end) as [flag=0条数],
     sum(case when flag=1 then 1 else 0 end) as [flag=1条数]
    from
     tb
    group by
     name,code
      

  4.   

    如果flag不止0,1的,等楼下贴动态代码吧,反正这类问题CSDN天天有,都有很多标准答案了
      

  5.   

    IF OBJECT_ID('tempdb..#temp') IS NOT NULL
    DROP TABLE #temp
    GO
    CREATE TABLE #temp
    (
    [name] NVARCHAR(10),
    [code] NVARCHAR(10),
    flag INT
    )
    INSERT #temp
    select N'测试01', N'测试01', N'0' union all
    select N'测试01', N'测试01', N'1' union all
    select N'测试01', N'测试01', N'1' union all
    select N'测试01', N'测试01', N'0' union all
    select N'测试01', N'测试01', N'0' union all
    select N'测试02', N'测试02', N'0' union all
    select N'测试02', N'测试02', N'1' union all
    select N'测试02', N'测试02', N'0' union all
    select N'测试02', N'测试02', N'0'
    GO
    --SQL:
    SELECT name, code, [flag=0条数]=[0], [flag=1条数]=[1] FROM
    (
    SELECT name, code, flag, cnt=COUNT(flag)
    FROM #temp
    GROUP BY name, code, flag
    ) a
    PIVOT
    (MAX(cnt) FOR flag IN([0], [1])) b
    --RESULT:
    /*
    name code flag=0条数 flag=1条数
    测试01 测试01 3 2
    测试02 测试02 3 1
    */