免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3651 | 回复: 11
打印 上一主题 下一主题

这个需求如何写SQL [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-12 20:18 |只看该作者 |倒序浏览
现在得到如下的查询结果,
A        B      C
3        2      1
3        1      1
1        1      2
2        1      2
1        2      3
1        3      1
1        2      1
3        2      3
3        3      2

再怎么写SQL可以得到下面的结果:
A    B      C
1        1      2
1        2      1
1        2      3
2        1      2
3        1      1
3        2      1
3        2      3

具体要求是在A值相同的情况下,用B,c排序,并且最多只出3条记录!

试了好久,没有实现,请教高手!

谢谢!

[ 本帖最后由 flw10000 于 2008-8-13 08:30 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-08-12 21:50 |只看该作者
用rank 函数
具体我忘记了
很久没有做数据库的东西了

论坛徽章:
0
3 [报告]
发表于 2008-08-13 08:13 |只看该作者
楼主,你的c也没有排序呀,乱七八糟的,order by a,b,c已经可以解决了

论坛徽章:
0
4 [报告]
发表于 2008-08-13 08:32 |只看该作者

回复 #3 dingning239 的帖子

C乱是因为先按B排序了!

怎么解决???

论坛徽章:
0
5 [报告]
发表于 2008-08-13 09:27 |只看该作者
order by a,b,c已经可以解决了

论坛徽章:
0
6 [报告]
发表于 2008-08-13 11:14 |只看该作者
SQL> select * from t4;

         A          B          C
---------- ---------- ----------
         3          2          1
         3          1          1
         1          1          2
         2          1          2
         1          2          3
         1          3          1
         1          2          1
         3          2          3
         3          3          2

已选择9行。

SQL> select a,b,c from (select row_number() over (partition by a order by a,b,c)
rn,t4.* from t4) where rn<=3;

         A          B          C
---------- ---------- ----------
         1          1          2
         1          2          1
         1          2          3
         2          1          2
         3          1          1
         3          2          1
         3          2          3

已选择7行。

论坛徽章:
0
7 [报告]
发表于 2008-08-13 11:37 |只看该作者
原帖由 dream_land 于 2008-8-13 11:14 发表
SQL> select * from t4;

         A          B          C
---------- ---------- ----------
         3          2          1
         3          1          1
         1          1          2
...


谢谢!

刚用rank()也写出来了!

论坛徽章:
0
8 [报告]
发表于 2008-08-13 11:45 |只看该作者
原帖由 dream_land 于 2008-8-13 11:14 发表
SQL> select * from t4;

         A          B          C
---------- ---------- ----------
         3          2          1
         3          1          1
         1          1          2
...

现在有一个新的问题:

实际SQL中SELECT的项目有很多,有什么方法可以简单的把除了rn以外的其它项目都表达出来?而不是一项一项的再写一次。

论坛徽章:
0
9 [报告]
发表于 2008-08-13 15:21 |只看该作者
用 rank() 函数是如何实现的呢? 能否把代码贴出来呢,谢谢。

论坛徽章:
0
10 [报告]
发表于 2008-08-13 16:24 |只看该作者
rank()行么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP