A   B
--- ------
1   M19000
1   M20000
2   M20002
2   M30001
2   M20001
2   M08002
2   M01004
2   M01005
0   M00000
1   M01000
1   M02000
1   M03000
1   M04000
1   M05000
1   M06000
1   M07000
1   M08000
1   M09000
1   M10000
1   M11000
1   M13000
1   M14000
1   M15000
1   M16000
2   M01002
2   M01003
2   M03001
2   M02001
2   M07001
2   M11001
2   M11003
2   M09001
2   M09002
2   M08001
2   M04001
2   M04002
2   M14001
2   M14002
2   M15001
2   M15002
1   M18000
2   M18001
2   M18002
2   M20004
我要在这个表里,找出B为M20004时,对应的A值的个数(在上例是A为2),应该怎么写比较好看?请问
谢谢

解决方案 »

  1.   

    SELECT t.b, sum(t.a)
      FROM t_table t
     WHERE t.b = 'M20004'
     GROUP BY t.b;
      

  2.   

    oracle 9.iselect count(a) from (select distinct(a) as a from (select a from aaa where b='M20004'));
      

  3.   

    比方说,当B为M20004时,A是2,那么我要找出A为2的个数
    当B为M18000时,A是1,那么我要找出A为1的个数
      

  4.   

    select count(c) from (select distinct(a) as c from 你的表名字 where b='M20004');
      

  5.   

    这样也可以select count(a) from(select distinct a,b from aaa where b='M20004');
      

  6.   

    偶不明白...
    distinct 不是消除重复么?
    select distinct a,b from aaa where b='M20004'
    select distinct(a) as c from 你的表名字 where b='M20004'
    在我的DB2里都只出来一条
    在ORACLE上能出25条?
      

  7.   

    没明白你的意思,大概想一下:select sum(t.a) from your_table t where t.b='M20004';或者这样?select count(*) from (
    select distinct(a) from your_table t where t.b='M20004';
    )
      

  8.   

    明白了
     select 'a=' || a || '个数=',sum(num) from (select a,1 as num from aaa where b='M20004') group by a;
      

  9.   

    SELECT count(*)
      FROM t_test t
     WHERE EXISTS (
       SELECT 1
         FROM t_test m
        WHERE m.a = t.a
          AND m.b = 'M20004'
     )
      

  10.   

    再问一下如果 M20004 对应的 A 有两个值,一个是 2,另一个是 3 怎么算?说实在的,你在 0 楼上问题就没说清楚,导致了很多没用的回复,浪费自己和别人的时间。PS:以后问数据库问题,请先说明数据库系统的名称和版本。
      

  11.   

    偶不明白... 
    distinct 不是消除重复么? 
    select distinct a,b from aaa where b='M20004' 
    select distinct(a) as c from 你的表名字 where b='M20004' 
    在我的DB2里都只出来一条 
    在ORACLE上能出25条?
    查具体数据帮助文档我确定的 sql server2000 和 oracle9.i 对distinct 支持的不是很一样,
      

  12.   

    我原以为有高手能把group by这类通用的方法的技巧拿出来展示
    所以才没有说清...
      

  13.   

    哎,偶开ORACLE试了下,庄稼汉大哥你的都查不出来...
      

  14.   


    oracle 9.i表名aaaa varchar2(2)
    b varchar2(20);数据
    1 M2005
    2 M2005
    3 M2005
    4 M2005
    1 M2005
    2 M2003
    3 M2007
    5 M2008
    8 M2009select 'a=' || a || '个数=',sum(num) from (select a,1 as num from aaa where b='M2005') group by a;我用的b列数据和你的不太一样,但绝对能查询出来结果
     
    SQL> select 'a=' || a || '个数=',sum(num) from (select a,1 as num from aaa where b='M2005') group by a;
     
    'A='||A||'个数='   SUM(NUM)
    ---------------- ----------
    a=1个数=                  2
    a=2个数=                  1
    a=3个数=                  1
    a=4个数=                  1
      

  15.   

    不是的,庄稼汉大哥,你的数据是
    a=1个数=                  2 
    这个条件的2条数据都是1 M2005,你改一下还能出来?TO 20F
    至于效果,我在6楼说过了
      

  16.   

    比方说,当B为M20004时,A是2,那么我要找出A为2的个数 
    当B为M18000时,A是1,那么我要找出A为1的个数终于看明白了,
    不好意思