一个关于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
……
大家都明白吧~~:) 展开
(为了方便阅读,我全部改为中文)
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
……
大家都明白吧~~:) 展开
5个回答
展开全部
根据[回答者: 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--
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--
展开全部
只要是苹果的就罗列在一起吧?
着要用前台程序来实现比较简单。
直接在sql文里做,很困难
着要用前台程序来实现比较简单。
直接在sql文里做,很困难
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是展现层的问题吧,不应该在数据库做吧
如果非要在数据库做只能写存储过程,用游标一条一条的查询接连几行相同的将值置为空
如果非要在数据库做只能写存储过程,用游标一条一条的查询接连几行相同的将值置为空
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Oracl什么意思啊!我不懂!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
下面的可以实现你的需求。原理是给前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的语句>
);
如果用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的语句>
);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询