有一张表    二个字段 (表数据如下)
区域(name)    注册类型(type)
A区                        1
B区                         2
C区                         3假设存在3个区,有三种注册类型,想查询出来的预想结果为区域     注册类型     统计量
A区       1                    1
A区       2                    0
A区       3                    0
B区       1                   0
B区       2                   1
B区       3                   0
C区       1                  0
C区       2                  0
C区       3                  1如果通过SQL查询出这样的结果呢

解决方案 »

  1.   

    select name, type,count(*)
    from t 
    group by name, type
      

  2.   


    with t as (
    select 'A区' name,1 type from dual union all
    select 'B区' name,2 type from dual union all
    select 'C区' name,3 type from dual)
    select a.name, b.type,count(case when a.type=b.type then 1 end) aaa
    from t a,t b
    group by a.name, b.type
    order by 1,2;
      

  3.   

    with t as (
    select 'A' as name1,1 as type1 from dual
    union all
    select 'B' as name1,2 as type1 from dual
    union all
    select 'C' as name1,3 as type1 from dual
    )select a.name1,b.type1,sum(decode(b.type1,a.type1,1,0))
    from t a ,t b 
    group by a.name1,b.type1
    order by a.name1,b.type1
      

  4.   

      数据是对的,但是记录数不对, select AAB301 ,REGTYPE ,count(0) as value  from wsbs_person  group by(AAB301,REGTYPE)  这是我写的统计
      

  5.   


    with t as (
    select 'A区' name,1 type from dual union all
    select 'A区' name,1 type from dual union all
    select 'A区' name,1 type from dual union all
    select 'A区' name,1 type from dual union all
    select 'B区' name,2 type from dual union all
    select 'B区' name,2 type from dual union all
    select 'B区' name,2 type from dual union all
    select 'C区' name,3 type from dual)
    select a.name, b.type,count(case when a.type=b.type then 1 end) aaa
    from  (select distinct * from t) a,t b
    group by a.name, b.type
    order by 1,2;有重复数据这么写试试
      

  6.   

    如果实际业务中是编码表+数据表(前面给的表),应该是数据表先直接GROUP BY
    结果再与编码表外连接
      

  7.   

    with t as (
    select 'A区' name,1 type from dual union all
    select 'B区' name,2 type from dual union all
    select 'C区' name,3 type from dual)
    select name, a.type, nvl2(b.type, 1, 0)
      from (select distinct type from t) a
      left join t b partition by(b.name)
        on a.type = b.type;
      

  8.   

    还是没找到合适的SQL,感觉有点难通过 一个SQL搞定,区域是动态的,
      

  9.   

    select name, type,count(*)
    from t 
    group by name, type
      

  10.   


    with t as (
    select 'A区' name,1 type from dual union all
    select 'B区' name,2 type from dual union all
    select 'C区' name,3 type from dual)
    select a.name, b.type,count(case when a.type=b.type then 1 end) aaa
    from t a,t b
    group by a.name, b.type
    order by 1,2;
    我验证了一下上面的确实能查出想要的数据但不是依据表查出来的
    =================
      

  11.   

    这样应该可以:select  name,type, count(*) from t group by name,type
    UNION ALL
    SELECT 'A区',0 FROM DUAL WHERE 0 = (SELECT COUNT(*) FROM t WHERE name= 'A区' AND TYPE = '1')
    UNION ALL
    SELECT 'A区',0 FROM DUAL WHERE 0 = (SELECT COUNT(*) FROM t WHERE name= 'A区' AND TYPE = '2')
    UNION ALL
    SELECT 'A区',0 FROM DUAL WHERE 0 = (SELECT COUNT(*) FROM t WHERE name= 'A区' AND TYPE = '3')
    UNION ALL
    SELECT 'B区',0 FROM DUAL WHERE 0 = (SELECT COUNT(*) FROM t WHERE name= 'B区' AND TYPE = '1')
    UNION ALL
    SELECT 'A区',0 FROM DUAL WHERE 0 = (SELECT COUNT(*) FROM t WHERE name= 'A区' AND TYPE = '2')
    UNION ALL
    SELECT 'A区',0 FROM DUAL WHERE 0 = (SELECT COUNT(*) FROM t WHERE name= 'A区' AND TYPE = '3')
    UNION ALL
    SELECT 'C区',0 FROM DUAL WHERE 0 = (SELECT COUNT(*) FROM t WHERE name= 'C区' AND TYPE = '1')
    UNION ALL
    SELECT 'A区',0 FROM DUAL WHERE 0 = (SELECT COUNT(*) FROM t WHERE name= 'A区' AND TYPE = '2')
    UNION ALL
    SELECT 'A区',0 FROM DUAL WHERE 0 = (SELECT COUNT(*) FROM t WHERE name= 'A区' AND TYPE = '3')
      

  12.   

    额,前面有点错select  name,type, count(*) from t group by name,type
    UNION ALL
    SELECT 'A区',0 FROM DUAL WHERE 0 = (SELECT COUNT(*) FROM t WHERE name= 'A区' AND TYPE = '1')
    UNION ALL
    SELECT 'A区',0 FROM DUAL WHERE 0 = (SELECT COUNT(*) FROM t WHERE name= 'A区' AND TYPE = '2')
    UNION ALL
    SELECT 'A区',0 FROM DUAL WHERE 0 = (SELECT COUNT(*) FROM t WHERE name= 'A区' AND TYPE = '3')
    UNION ALL
    SELECT 'B区',0 FROM DUAL WHERE 0 = (SELECT COUNT(*) FROM t WHERE name= 'B区' AND TYPE = '1')
    UNION ALL
    SELECT 'B区',0 FROM DUAL WHERE 0 = (SELECT COUNT(*) FROM t WHERE name= 'B区' AND TYPE = '2')
    UNION ALL
    SELECT 'B区',0 FROM DUAL WHERE 0 = (SELECT COUNT(*) FROM t WHERE name= 'B区' AND TYPE = '3')
    UNION ALL
    SELECT 'C区',0 FROM DUAL WHERE 0 = (SELECT COUNT(*) FROM t WHERE name= 'C区' AND TYPE = '1')
    UNION ALL
    SELECT 'C区',0 FROM DUAL WHERE 0 = (SELECT COUNT(*) FROM t WHERE name= 'C区' AND TYPE = '2')
    UNION ALL
    SELECT 'C区',0 FROM DUAL WHERE 0 = (SELECT COUNT(*) FROM t WHERE name= 'C区' AND TYPE = '3')
      

  13.   

    --假设数据如下:
    with t as (
    select 'A区' name,1 type from dual union all
    select 'B区' name,2 type from dual union all
    select 'C区' name,3 type from dual)--以下是查询语句
    SELECT a.NAME, b.TYPE, SUM(CASE WHEN a.TYPE=b.TYPE THEN 1 ELSE 0 END) TYPE_SUM
    FROM t a
    CROSS JOIN t b
    GROUP BY a.NAME, b.TYPE
    ORDER BY a.NAME
      

  14.   

    我也觉得实际业务中应该是这样,或者没有的话,也应该按照这个思路,先select distinct出临时的编码表,再外关联,别人阅读SQL时会好理解一点