oldwain随便写
===========================================================
===========================================================

问题来源: http://www.itpub.net/showthread.php?threadid=281465&pagenumber=

原文标题:1 个很难的SQL问题

表 t0 (f0 number(2)) ,f0列的数据为从1至9。

需要提取 1,2,3......7,8,9 中相加等于15 的组合。
比如:
1 2 3 4 5
6 9
7 8
3 5 7
。。。。。。。。。。。

解决方法:


假设:

只允许取不重复的数字

分析:

在前面的假设情况下, 要组成15, 极端情况需要 1 2 3 4 5五个数字, 因此不必考虑5个以上的数字组成

预备工作:

预先插入一条记录0
insert into t0 values (0);
commit;

当然, 不做这一步也可以. 只要将下面的语句中所有的t0 替换为 (select * from t0 union select 0 from dual)即可, 只是使得语句变得不太简洁.

SQL> select * from t0;

F0
---
1
2
3
4
5
6
7
8
9
0

10 rows selected.


real: 10
SQL> select
2 a1.f0,
3 a2.f0,
4 a3.f0,
5 a4.f0,
6 a5.f0
7 from
8 t0 a1,
9 t0 a2,
10 t0 a3,
11 t0 a4,
12 t0 a5
13 where
14 a1.f0 +
15 a2.f0 +
16 a3.f0 +
17 a4.f0 +
18 a5.f0 =15
19 and (a1.f0 < a2.f0 or a1.f0 = 0)
20 and (a2.f0 < a3.f0 or a2.f0 = 0)
21 and (a3.f0 < a4.f0 or a3.f0 = 0)
22 and (a4.f0 < a5.f0 or a4.f0 = 0)
23 order by
24 a1.f0,
25 a2.f0,
26 a3.f0,
27 a4.f0,
28 a5.f0
29 /

F0 F0 F0 F0 F0
--- --- --- --- ---
0 0 0 6 9
0 0 0 7 8
0 0 1 5 9
0 0 1 6 8
0 0 2 4 9
0 0 2 5 8
0 0 2 6 7
0 0 3 4 8
0 0 3 5 7
0 0 4 5 6
0 1 2 3 9
0 1 2 4 8
0 1 2 5 7
0 1 3 4 7
0 1 3 5 6
0 2 3 4 6
1 2 3 4 5

17 rows selected.

real: 10
SQL>

(需要引用, 请注明出处: http://oldwain.itpub.net)

oldwain 发表于:2004.10.27 14:16 ::分类: ( Oracle ) ::阅读:(2099次) :: 评论 (1) ::收藏此页到365Key
好像不对吧~ [回复]

我试了一下
select
a1.f0,
a2.f0,
a3.f0,
a4.f0,
a5.f0
from
t0 a1,
t0 a2,
t0 a3,
t0 a4,
t0 a5
where
a1.f0 +
a2.f0 +
a3.f0 +
a4.f0 +
a5.f0 =15
and (a1.f0)
and (a2.f0)
and (a3.f0)
and (a4.f0)
order by
a1.f0,
a2.f0,
a3.f0,
a4.f0,
a5.f0

有错误:ora-00920 invalid relational operator
怎么回事??请指教

Jackyhou 评论于: 2004.11.10 16:31

发表评论
标题

在此添加评论
表情符号: smile laughing tongue angry crying sad wassat wink

称呼

邮箱地址(可选)

个人主页(可选)

 authimage


自我介绍
切换风格
新闻聚合
博客日历
文章归档...
最新发表...
最新评论...
最多阅读文章...
最多评论文章...
博客统计...
Blog信息
赞助商
网站链接...
其它资源
我的网摘...