请教一个写法,大家帮忙在线等!!!!!

[复制链接]
查看11 | 回复9 | 2010-3-1 11:19:49 | 显示全部楼层 |阅读模式
目前表里面的数据记录。
id color_nameparent_id
1 Blue
10
2 Blue
10
3 Red
10
4 Red
10
期望得到结果
id color_nameparent_idcolor_num
1 Blue
10
2
2 Blue
10
2
3 Red
10
2
4 Red
10
2

想要就是怎么得到最后那列的color的数量,这个数量是对于 parent_id来讲。一个parent_id有几种颜色后面那个num就显示几。

求一个sql怎么写出来
回复

使用道具 举报

千问 | 2010-3-1 11:19:49 | 显示全部楼层
SQL> select * from test;
ID COLOR_NAME
PARENT_ID

---------- -------------------- ----------

1 blue
10

2 blue
10

3 red
10

4 red
10

5 blue
10

SQL> select a.*,(select count(*) cnt from test b where b.color_name=a.color_name) color_num from test a
2/
ID COLOR_NAME
PARENT_IDCOLOR_NUM

---------- -------------------- ---------- ----------

1 blue
10
3

2 blue
10
3

3 red
10
2

4 red
10
2

5 blue
10
3
回复

使用道具 举报

千问 | 2010-3-1 11:19:49 | 显示全部楼层
原帖由 liufeng1980421 于 2010-1-13 21:26 发表
SQL> select * from test;
ID COLOR_NAME
PARENT_ID

---------- -------------------- ----------

1 blue
10

2 blue
10

3 red
10

4 red
10

5 blue
10

SQL> select a.*,(select count(*) cnt from test b where b.color_name=a.color_name) color_num from test a
2/
ID COLOR_NAME
PARENT_IDCOLOR_NUM

---------- -------------------- ---------- ----------

1 blue
10
3

2 blue
10
3

3 red
10
2

4 red
10
2

5 blue
10
3


首先感谢你,但是不是我期望的结果,parent_id10 他下面的id只有2种颜色,那么我期望的结果是。
ID COLOR_NAME
PARENT_IDCOLOR_NUM

---------- -------------------- ---------- ----------

1 blue
10
2

2 blue
10
2

3 red
10
2

4 red
10
2

5 blue
10
2
回复

使用道具 举报

千问 | 2010-3-1 11:19:49 | 显示全部楼层
select a.*,(select count(distinct(color_name)) cnt from test b where b.parent_id=a.parent_id) color_num from test a
回复

使用道具 举报

千问 | 2010-3-1 11:19:49 | 显示全部楼层
select a.*,count(distinct color_name) over(partition by parent_id order by 1) color_num
from tb_name a;
回复

使用道具 举报

千问 | 2010-3-1 11:19:49 | 显示全部楼层
select a.*,count(distinct color_name) over(partition by parent_id order by 1) color_num from tb_name

*
第 1 行出现错误:
ORA-30487: ORDER BY 在此禁用
回复

使用道具 举报

千问 | 2010-3-1 11:19:49 | 显示全部楼层
这里不能用order by?
回复

使用道具 举报

千问 | 2010-3-1 11:19:49 | 显示全部楼层
SQL> create table a(id number,color_name char(1),parent_id number);
表已创建。
SQL> select a.*,count(distinct color_name) over(partition by parent_id order by
1) color_num
2from a a;
select a.*,count(distinct color_name) over(partition by parent_id order by 1) co
lor_num

*
第 1 行出现错误:
ORA-30487: ORDER BY 在此禁用
果然,那就去掉咯,反正order by在这里没啥意义
回复

使用道具 举报

千问 | 2010-3-1 11:19:49 | 显示全部楼层
SQL> select * from a;
ID COPARENT_ID
---------- -- ----------
1 a
10
2 a
10
3 a
10
4 b
11
5 c
10
6 c
11
已选择6行。
SQL> select a.*,count(distinct color_name) over(partition by parent_id) color_nu
m
2from a;
ID COPARENT_IDCOLOR_NUM
---------- -- ---------- ----------
1 a
10
2
2 a
10
2
3 a
10
2
5 c
10
2
4 b
11
2
6 c
11
2
已选择6行。
SQL>
回复

使用道具 举报

千问 | 2010-3-1 11:19:49 | 显示全部楼层
原帖由 CaptainKobe 于 2010-1-13 22:05 发表
SQL> create table a(id number,color_name char(1),parent_id number);
表已创建。
SQL> select a.*,count(distinct color_name) over(partition by parent_id order by
1) color_num
2from a a;
select a.*,count(distinct color_name) over(partition by parent_id order by 1) co
lor_num

*
第 1 行出现错误:
ORA-30487: ORDER BY 在此禁用
果然,那就去掉咯,反正order by在这里没啥意义


可以把具体结果贴出来么?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行