请教SQL语句写法,立马给分

pipiright 2005-01-31 07:44:07
有两个表
表A:
ID S SS BB1 CC1 BB2 CC2 BB3 CC3 BB4 CC4

表B:
ID Num BB CC

同一条Record里一个ID有4个BB、CC,分别为BB1 CC1 BB2 CC2 BB3 CC3 BB4 CC4

select出来的结果需要如下:
a.ID a.S a.SS b.Num a.BB(n) a.CC(n) b.BB b.CC

第一行:
a.ID a.S a.SS b.Num 空 空 空  空
第二行:
a.ID  空  空  空 a.BB1 a.CC1 b.BB b.CC
第三行:
a.ID  空  空  空 a.BB2 a.CC2 / /
第四行:
a.ID  空  空  空 a.BB3 a.CC3 / /
第五行:
a.ID  空  空  空 a.BB4 a.CC4 / /

然后是第二个ID开始...

请问有没办法用SQL语句写出来?
谢谢!
...全文
261 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
lynx 2005-02-02
  • 打赏
  • 举报
回复
回复人: pipiright(pipiright) ( ) 信誉:100 2005-02-01 16:08:00 得分: 0


请问能否具体说说“索引的列”怎么回事?
怎么写?
谢谢。


--
就是说行号啦。 第一行:索引的列(indexsort)=1...依次类推。
Croatia 2005-02-02
  • 打赏
  • 举报
回复
我所说的“索引的列”,其实就是一个常数,就是我写的句子里面的indexsort这个字段。
用来排序用。
写法,我上面已经写了。
pipiright 2005-02-01
  • 打赏
  • 举报
回复

乱了

a.ID a.S a.SS b.Num a.BB a.CC b.BB b.CC
a.ID a.S a.SS b.Num 空 空 空  空 -->第一行
空  空  空  空 a.BB1 a.CC1 b.BB b.CC -->第二行
空  空  空  空 a.BB2 a.CC2 b.BB b.CC -->第三行
空  空  空  空 a.BB3 a.CC3 b.BB b.CC -->第四行
空  空  空  空 a.BB4 a.CC4 b.BB b.CC -->第五行
Croatia 2005-02-01
  • 打赏
  • 举报
回复
刚刚才看到你上面的条件变掉了,那个SQL句子一样可以完成的。
修改一下你需要选择的字段,一样可以完成的。赫赫。
Croatia 2005-02-01
  • 打赏
  • 举报
回复
明白楼主的意思。
1。用union,可以添加一个索引的列,来表示自己从什么地方来。用来排序。就是我下面用的indexsort这个字段。(修改了 wupangzi(无本之木) ( )的句子。)

select a.ID aa,1 indexsort,a.S ab,a.SS ac,b.Num ad,'' ae,'' af,'' ag,'' ah
from 表A a,表B b
where a.ID = b.ID
uinon all
select a.ID aa,2 indexsort,'' ab,'' ac,'' ad,a.BB1 ae,a.CC1 af,b.BB ag,b.CC ah
from 表A a,表B b
where a.ID = b.ID
uinon all
select a.ID aa,3 indexsort,'' ab,'' ac,'' ad,a.BB2 ae,a.CC2 af,'/' ag,'/' ah
from 表A a,表B b
where a.ID = b.ID
uinon all
select a.ID aa,4 indexsort,'' ab,'' ac,'' ad,a.BB3 ae,a.CC3 af,'/' ag,'/' ah
from 表A a,表B b
where a.ID = b.ID
uinon all
select a.ID aa,5 indexsort,'' ab,'' ac,'' ad,a.BB4 ae,a.CC4 af,'/' ag,'/' ah
from 表A a,表B b
where a.ID = b.ID
order by aa,indexsort;
(因为没有环境,只是写了一个大概,可能有错误。只是提供一个我的想法。)

2。可以做成一个PL/SQL,那样简单的多,传入一个ID,得到你想要的5行记录。外面循环。
pipiright 2005-02-01
  • 打赏
  • 举报
回复
是为了做一张报表
而且是Oracle自动做
然后spool出成txt文件
qiansl 2005-02-01
  • 打赏
  • 举报
回复
没什么意思
ORARichard 2005-02-01
  • 打赏
  • 举报
回复
还是看着晕,不知道楼主这个查询是不是为了做一张报表,如果是的话,建议楼主不要用一句SQL去做,也没必要,通过相关查询得到所需数据,把数据放在合适的位置即可。
js_nicle 2005-02-01
  • 打赏
  • 举报
回复
闲着没事弄这样的sql干什么?楼主解释一下,我们也需要了解它的用途呀
pipiright 2005-02-01
  • 打赏
  • 举报
回复
请问能否具体说说“索引的列”怎么回事?
怎么写?
谢谢。
pipiright 2005-01-31
  • 打赏
  • 举报
回复

回复人: ORARichard(没钱的日子......) ( ) 信誉:100 2005-01-31 20:49:00 得分: 0


select a.id,a.s,b.num,a.bbn,a.ccn,b.bb,b.cc from
(
select ID,S,SS,BB1 bbn,CC1 ccn from a union all
select id,s,ss,bb2,cc2 from a union all
select id,s,ss,bb3,cc3 from a union all
select id,s,ss,bb4,cc4 from a
) a,b
where a.id=b.id

试试这个还差多少,对你查询的结果不是很理解。最好解释一下是怎么得来的。

上面有些地方说得有误
更新如下:
表A中的BB、CC(实际是没有BB、CC的,表B中的BB/CC和表A的不是同一个)分为BB1 CC1 BB2 CC2 BB3 CC3 BB4 CC4
BB、CC和BB1 CC1 BB2 CC2 BB3 CC3 BB4 CC4的逻辑关系是:
BB=BB1+BB2+BB3+BB4
CC=CC1+CC2+CC3+CC4
表A中的一个ID写成5条record
其中第一条record只有a.ID a.S a.SS b.Num四个字段有值,a.BB1,a.BB2和b.BB,b.CC的位置为空。
第二到第四条record,a.ID a.S a.SS b.Num四个字段的位置为空,a.BB1,a.BB2和b.BB,b.CC的位置
有值
第6条到第10条record为第二个ID...
如此类推

最后变成如下:
a.ID a.S a.SS b.Num a.BB(n) a.CC(n) b.BB b.CC
a.ID a.S a.SS b.Num 空 空 空  空 -->第一行
空  空  空  空 a.BB1 a.CC1 b.BB b.CC -->第二行
空  空  空  空 a.BB2 a.CC2 b.BB b.CC -->第三行
空  空  空  空 a.BB3 a.CC3 b.BB b.CC -->第四行
空  空  空  空 a.BB4 a.CC4 b.BB b.CC -->第五行

谢谢楼上各位的回复
wupangzi 2005-01-31
  • 打赏
  • 举报
回复
select a.ID aa,a.S ab,a.SS ac,b.Num ad,'' ae,'' af,'' ag,'' ah
from 表A a,表B b
where a.ID = b.ID
uinon all
select a.ID aa,'' ab,'' ac,'' ad,a.BB1 ae,a.CC1 af,b.BB ag,b.CC ah
from 表A a,表B b
where a.ID = b.ID
uinon all
select a.ID aa,'' ab,'' ac,'' ad,a.BB2 ae,a.CC2 af,'/' ag,'/' ah
from 表A a,表B b
where a.ID = b.ID
uinon all
select a.ID aa,'' ab,'' ac,'' ad,a.BB3 ae,a.CC3 af,'/' ag,'/' ah
from 表A a,表B b
where a.ID = b.ID
uinon all
select a.ID aa,'' ab,'' ac,'' ad,a.BB4 ae,a.CC4 af,'/' ag,'/' ah
from 表A a,表B b
where a.ID = b.ID
order by aa;
ORARichard 2005-01-31
  • 打赏
  • 举报
回复
select a.id,a.s,b.num,a.bbn,a.ccn,b.bb,b.cc from
(
select ID,S,SS,BB1 bbn,CC1 ccn from a union all
select id,s,ss,bb2,cc2 from a union all
select id,s,ss,bb3,cc3 from a union all
select id,s,ss,bb4,cc4 from a
) a,b
where a.id=b.id

试试这个还差多少,对你查询的结果不是很理解。最好解释一下是怎么得来的。
pipiright 2005-01-31
  • 打赏
  • 举报
回复
uinon all怎么做?
能否写出来?
wupangzi 2005-01-31
  • 打赏
  • 举报
回复
最简单的是可以用uinon all来实现!
pipiright 2005-01-31
  • 打赏
  • 举报
回复
To wupangzi(无本之木)
指的是表A
wupangzi 2005-01-31
  • 打赏
  • 举报
回复
同一条Record里一个ID有4个BB、CC,分别为BB1 CC1 BB2 CC2 BB3 CC3 BB4 CC4?
这句话指的是表B中的记录吗?
pipiright 2005-01-31
  • 打赏
  • 举报
回复
直接Select出来是不可能的
怎么用存储过程来写?
或者有别的方法?

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧