一个关于Oracle连接查询的问题

本人初学Oracle,遇到了一个问题,希望大家帮忙解决:(为了方便阅读,我全部改为中文)SELECT"产品"."产品名称","订单"."年份","订单"."季度","订单... 本人初学Oracle,遇到了一个问题,希望大家帮忙解决:
(为了方便阅读,我全部改为中文)
SELECT "产品"."产品名称",
"订单"."年份",
"订单"."季度",
"订单明细"."销售额"

FROM "产品",
"订单",
"订单明细"

WHERE "订单明细"."产品ID" = "产品"."产品ID"(+)
AND "订单明细"."订单ID" = "订单"."订单ID"(+)

GROUP BY
"产品名称",
"订购年份",
"订购季度"

ORDER BY
"产品名称",
"订购年份",
"订购季度"

我希望得到的结果是:
产品名称 订购年份 订购季度 销售额
苹果 2000 1 100
2 82
3 126
4 65
2001 1 262
2 421
…… …… ……
梨 2000 1 123
…… …… …… ……

可运行的结果为:
苹果 2000 1 100
苹果 2000 2 82
…… …… …… ……

哪里出的错呢?
大家帮帮忙~~
在此先谢谢了~~
格式怎么不对了~~7456
我希望得到的结果是
产品名称 年份 季度 销售额
苹果———2000—1——100
————————2——25
————————3——82
————————4——45
—————2001—1——53
……
梨————2000—1——152
……
大家都明白吧~~:)
展开
 我来答
困魔咒
2008-11-14 · TA获得超过247个赞
知道小有建树答主
回答量:348
采纳率:0%
帮助的人:0
展开全部
根据[回答者: troyzeng - 试用期 一级]提供的方法测试,结果如下:
SQL> CREATE TABLE a(
2 a1 VARCHAR2(5),
3 a2 VARCHAR2(4),
4 a3 VARCHAR2(1),
5 a4 NUMBER
6 );

Table created

SQL>
SQL> insert into a values('苹果','2000','1',100);

1 row inserted
SQL> insert into a values('苹果','2000','2',82);

1 row inserted
SQL> insert into a values('苹果','2000','3',126);

1 row inserted
SQL> insert into a values('苹果','2000','4',65);

1 row inserted
SQL> insert into a values('苹果','2001','1',262);

1 row inserted
SQL> insert into a values('苹果','2001','2',421);

1 row inserted
SQL> insert into a values('梨','2000','1',123);

1 row inserted
SQL> commit;

Commit complete
SQL> select * from a;

A1 A2 A3 A4
----- ---- -- ---------
苹果 2000 1 100
苹果 2000 2 82
苹果 2000 3 126
苹果 2000 4 65
苹果 2001 1 262
苹果 2001 2 421
梨 2000 1 123

7 rows selected

SQL> select
2 decode(dense_rank() over(partition by a1 order by a2, a3 ), 1, a1, null) 产品名称,
3 decode(dense_rank() over(partition by a1, a2 order by a3 ), 1, a2, null) 年份,
4 a3 季度,
5 a4 销售额
6 from a;

产品名称 年份 季度 销售额
-------- ---- ---- ---------
梨 2000 1 123
苹果 2000 1 100
2 82
3 126
4 65
2001 1 262
2 421

7 rows selected--
asasas2002
2008-11-12 · TA获得超过1348个赞
知道小有建树答主
回答量:367
采纳率:100%
帮助的人:300万
展开全部
只要是苹果的就罗列在一起吧?
着要用前台程序来实现比较简单。
直接在sql文里做,很困难
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友9152734da
2008-11-12 · TA获得超过172个赞
知道小有建树答主
回答量:249
采纳率:0%
帮助的人:136万
展开全部
这是展现层的问题吧,不应该在数据库做吧

如果非要在数据库做只能写存储过程,用游标一条一条的查询接连几行相同的将值置为空
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ppuhao
2008-11-12 · TA获得超过2357个赞
知道答主
回答量:218
采纳率:0%
帮助的人:0
展开全部
Oracl什么意思啊!我不懂!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
troyzeng
2008-11-14 · TA获得超过158个赞
知道答主
回答量:32
采纳率:0%
帮助的人:42.3万
展开全部
下面的可以实现你的需求。原理是给前n-2列编号,编号为1的那行显示内容,否则显示null。
如果用sql*plus, 可以试试“break on 产品名称 skip 1”,但好像不能实现多列。

select
decode(dense_rank() over(partition by 产品名称 order by 年份, 季度 ), 1, 产品名称, null) 产品名称,
decode(dense_rank() over(partition by 产品名称, 年份 order by 季度 ), 1, 年份, null) 年份,
季度,
销售额
from (
<你的含group by和order by的语句>
);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式