请教个SQL..

zapdos 2009-06-24 09:00:08
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),应该怎么写比较好看?请问
谢谢
...全文
46 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
bingsha1976 2009-06-25
  • 打赏
  • 举报
回复

oracle 9.i

表名aaa

a varchar2(2)
b varchar2(20);

数据
1 M2005
2 M2005
3 M2005
4 M2005
1 M2005
2 M2003
3 M2007
5 M2008
8 M2009

select '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
bingsha1976 2009-06-25
  • 打赏
  • 举报
回复
比方说,当B为M20004时,A是2,那么我要找出A为2的个数
当B为M18000时,A是1,那么我要找出A为1的个数

终于看明白了,
不好意思
zapdos 2009-06-25
  • 打赏
  • 举报
回复
再简单的说,结果就是12F贴的那个,但是我想看看有没有简便的方法...
zapdos 2009-06-25
  • 打赏
  • 举报
回复
不是的,庄稼汉大哥,你的数据是
a=1个数= 2
这个条件的2条数据都是1 M2005,你改一下还能出来?

TO 20F
至于效果,我在6楼说过了
valen_jia 2009-06-25
  • 打赏
  • 举报
回复
看不懂啊,没看明白啥意思,你把你要的结果贴出来,我们看看
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 zapdos 的回复:]
我原以为有高手能把group by这类通用的方法的技巧拿出来展示
所以才没有说清...
[/Quote]

嗯,表达是有问题,至少这句话我就没看懂是什么意思。
zapdos 2009-06-24
  • 打赏
  • 举报
回复
哎,偶开ORACLE试了下,庄稼汉大哥你的都查不出来...
zapdos 2009-06-24
  • 打赏
  • 举报
回复
我原以为有高手能把group by这类通用的方法的技巧拿出来展示
所以才没有说清...
zapdos 2009-06-24
  • 打赏
  • 举报
回复
哎,我个人不太善于表达,可能是我表达有问题吧
但我觉得我应该有把问题说清楚了


不过我只是觉得数据库里应该有一些好的方法来处理这类问题,所以才问下。。。
bingsha1976 2009-06-24
  • 打赏
  • 举报
回复
偶不明白...
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 支持的不是很一样,

  • 打赏
  • 举报
回复
再问一下如果 M20004 对应的 A 有两个值,一个是 2,另一个是 3 怎么算?

说实在的,你在 0 楼上问题就没说清楚,导致了很多没用的回复,浪费自己和别人的时间。

PS:以后问数据库问题,请先说明数据库系统的名称和版本。
  • 打赏
  • 举报
回复
SELECT count(*)
FROM t_test t
WHERE EXISTS (
SELECT 1
FROM t_test m
WHERE m.a = t.a
AND m.b = 'M20004'
)
bingsha1976 2009-06-24
  • 打赏
  • 举报
回复
明白了


select 'a=' || a || '个数=',sum(num) from (select a,1 as num from aaa where b='M20004') group by a;
kokobox 2009-06-24
  • 打赏
  • 举报
回复
没明白你的意思,大概想一下:

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';
)
zapdos 2009-06-24
  • 打赏
  • 举报
回复
偶不明白...
distinct 不是消除重复么?
select distinct a,b from aaa where b='M20004'
select distinct(a) as c from 你的表名字 where b='M20004'
在我的DB2里都只出来一条
在ORACLE上能出25条?
bingsha1976 2009-06-24
  • 打赏
  • 举报
回复
这样也可以

select count(a) from(select distinct a,b from aaa where b='M20004');
zjcybfq 2009-06-24
  • 打赏
  • 举报
回复
select count(c) from (select distinct(a) as c from 你的表名字 where b='M20004');
zapdos 2009-06-24
  • 打赏
  • 举报
回复
比方说,当B为M20004时,A是2,那么我要找出A为2的个数
当B为M18000时,A是1,那么我要找出A为1的个数
bingsha1976 2009-06-24
  • 打赏
  • 举报
回复
oracle 9.i

select count(a) from (select distinct(a) as a from (select a from aaa where b='M20004'));
  • 打赏
  • 举报
回复
什么意思啊?没看明白。。。。。。
加载更多回复(3)

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧