A表有ID,A1,A2。A36,B1,B2,B16 字段。 B表有ID,A1,A2,A3,A4,A5,A6,B1字段条件:A表A1。。A36中有6个字段有数据,B1至B16中有一个字段有数据。要求:把A表中的字段不为空的数值放入B表中,B表中的A1至A6放A表中的A1至A36中的6个字段不为空的值,B表中的B1放A表中的B1至B16中的不为空的一个字段的值实际上这是一个36选7的题目有兴趣的可以写一下:方法不限我想用数组,但不知道怎么把A表中的数据放入到数组中
解决方案 »
- 请求高人详解一下关于ORACLE EBS套件的知识
- 在线等。。。。java中jdbc插入时将String转换成CLOB
- 在真实服务器RHEL5.4上安装oracle10.2.0.1
- 菜鸟级别学Oracel
- 请问如何把一个用户的表,授予另一个用户呀
- 为什么会出现fetch out of sequence错误,该如何解决?
- 关于数据库连接的Data Source
- ★★拣分了!这样的SQL 语句如何写?(oracle 7.3.4)★★
- 过多的analyze是否会象过多的索引一样影响数据库的性能?
- JSP+ORACLE的问题(高手请进!)
- 职位名称与其各自求职者人数的查询,SQL怎么写啊
- 请教大家:在linux下访问oracle数据库的代码
:把A表中的字段不为空的数值放入B表中,B表中的A1至A6放A表中的A1至A36中的6个字段不为空的值,B表中的B1放A表中的B1至B16中的不为空的一个字段的值
INSERT INTO B(A1,A2,A3,A4,A5,A6)
SELECT DISTINCT
ID,MAX(DECODE(NUM,1,A1)) OVER(PARTITION BY ID),
MAX(DECODE(NUM,2,A1)) OVER(PARTITION BY ID),
MAX(DECODE(NUM,3,A1)) OVER(PARTITION BY ID),
MAX(DECODE(NUM,4,A1)) OVER(PARTITION BY ID),
MAX(DECODE(NUM,5,A1)) OVER(PARTITION BY ID),
MAX(DECODE(NUM,6,A1)) OVER(PARTITION BY ID)
FROM(
SELECT ID,A1,ROW_NUMBER() OVER(PARTITION BY ID,ORDER BY A1) NUM,
FROM(
SELECT ID,A1 FROM A WHERE A1 IS NULL
UNION ALL
SELECT ID,A2 FROM A WHERE A2 IS NULL
.........
UNION
SELECT ID,A36 FROM A WHERE A36 IS NULL
))B同理,等待更好的解决方案
个人觉得用FUNCTION,数组单条执行比较好.对于B有个更好的办法:
SELECT B1||B2||B3||B4||B5||B6||B7||B8||B9||B10||B11||B12||B13||B14||B15||B16
FROM A
因为B1~B16只有一个有值.同样等待更好的解决方案
DECODE(NVL(F01,'#'),'#','',F01||',')||
DECODE(NVL(F01,'#'),'#','',F02||',')||
DECODE(NVL(F01,'#'),'#','',F03||',')||
...
DECODE(NVL(F01,'#'),'#','',F36||',')||
||');',
',)',')')
from t36;
这是一高人写出来的,我没检查对不对