请教SQL语句。 (50分)

S

sbh410

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个表 AA
IC的字段内容只有 I 和 C
IC CHG_CODE AMOUNT APARTY ID
I yyy 100 DDD 1
C ABC 23 DEE 2
I EDE 53.2 DIS 3
I ADE 34.5 ERW 4
C YUUU 56 DL 5
现在要用SQL语句得到如下结果。
IC(I) CHG_CODE AMOUNT APARTY IC(C) CHG_CODE AMOUNT APARTY
I yyy 100 DDD C ABC 23 DEE
I EDE 53.2 DIS C YUUU 56 DL
I ADE 34.5 ERW


 
说的不太明白 :((
是要生成新的列??
 
要生成新的列
 
方法(1)纵表变横表
方法(2)使用oracle 中的外连接,可以实现
 
就是IC是I和C是没有联系的,只要把他们放在一行上。就像前面的I的行数多,那么C的其他地方就空着
不知道我讲清楚了没有
 
是的,不过我是MSSQL,就是怎么样连接字段了。
 
是这样呀,我明白了你可使用SQL语句中的交叉表,就可以作到这一点
但交叉表有一个问题,就是如果I或C有一方不存在时
就会出现问题。

你还可以使用,联合再嵌套的方式,来达到同一效果。

不过,如果你的IC(I)与IC(C)并没有任何关系,那你最好不要这样去设计它,

:)
 
在这里是没有联系,我是做一张这样的报表,没办法。客户的难要求。
 
用个临时表,读一个为ic的记录写一部分,为c的记录写一部分
 
我起先用了交叉查询的SQL语句 但是效果是这样的
IC(I) CHG_CODE AMOUNT APARTY IC(C) CHG_CODE AMOUNT APARTY
I yyy 100 DDD NULL NULL NULL NULL
I EDE 53.2 DIS NULL NULL NULL NULL
I ADE 34.5 ERW NULL NULL NULL NULL
NULL NULL NULL NULL C ABC 23 DEE
NULL NULL NULL NULL C YUUU 56 DL

 
ugvanxk你的 方法我也想过的,最后应该是可以的,但是我想用一句SQL语句,不知道行不行
 
select aaa.*,bbb.* from
(select (select count(id) from aa b where (b.id <= a.id) and (ic='I')) as newid,* from aa a where ic='I') aaa
full outer join
(select (select count(id) from aa b where (b.id <= a.id) and (ic='C')) as newid,* from aa a where ic='C') bbb
on aaa.newid=bbb.newid
order by aaa.newid,bbb.newid

表AA的ID必须是唯一值,不然会不正确
 
QuickSilver,非常感谢。很厉害。哈哈。你这样是可以的,
但是我如果对CHG_CODE进行排序呢,还有其他字段排序应该如何呢
 
最后一句
order by aaa.newid,bbb.newid
改成
order by aaa.chg_code

order by aaa.chg_code,bbb.chg_code
 
to sbh410:
你之所以是那种结果,
主要是因为你的IC(I)同IC(C)之间并没有联系,
如能确定它们之间的一对一关系,
就不会这样了
 
QuickSilver,一定要 order by aaa.newid,bbb.newid,不然的话,
可能出现右边的第一行是空着的.除非就是ID的顺序和CHG_CODE一样
 
还有:
要保证(id)字段的升序排列,否则QuickSilver兄的(b.id <= a.id) 就发挥
不出奇效了.


====>>好像不对?再想想……

 
QuickSilver大俠真是高﹗﹗我都看不懂﹗哎﹐慚愧啊﹗﹗
 
大家努力啊,继续,提前。
 
顶部