一条SQL语句,如何写?

[复制链接]
查看11 | 回复9 | 2009-12-28 22:11:19 | 显示全部楼层 |阅读模式
请教一条SQL语句!!!
CREATE TABLE ttt
(tab_name VARCHAR2(25), --表名
tab_col VARCHAR2(30), --表的字段
col_comment VARCHAR2(300) , --col_desc
col_id NUMBER --col_id
);
insert into ttt values (t1,t1_col1,desc,1);
insert into ttt values (t1,t1_col2,desc,2);
insert into ttt values (t2,t2_col2,desc,2);
insert into ttt values (t2,t2_col1,desc,1);
insert into ttt values (t3,t3_col1,desc,1);
TTT 表里存的是表的定义;
现在要求把其中登记的每个表添加个字段,TEST_ADD
原来输出:
TAB_NAME TAB_COL COL_COMMENT COL_ID
t1 t1_col1 desc 1.00
t1 t1_col2 desc 2.00
t2 t2_col2 desc 2.00
t2 t2_col1 desc 1.00
t3 t3_col1 desc 1.00

要求添加字段后的输出
TAB_NAME TAB_COL COL_COMMENT COL_ID
t1 t1_col1 desc 1.00
t1 t1_col2 desc 2.00
t1 add_test desc 3.00
t2 t2_col1 desc 1.00
t2 t2_col2 desc 2.00
t2 add_test desc 3.00
t3 t3_col1 desc 1.00
t3 add_test desc 2.00
使用 分析函数能实现吗?
回复

使用道具 举报

千问 | 2009-12-28 22:11:19 | 显示全部楼层
分析函数不知道,反正使用普通的方法就可以实现
回复

使用道具 举报

千问 | 2009-12-28 22:11:19 | 显示全部楼层
懒得写,给你点提示吧,用nvl+group by+rollup就可以了。。。
回复

使用道具 举报

千问 | 2009-12-28 22:11:19 | 显示全部楼层
最初由 20013011094 发布
[B]请教一条SQL语句!!!
CREATE TABLE ttt
(tab_name VARCHAR2(25), --表名
tab_col VARCHAR2(30), --表的字段
col_comment VARCHAR2(300) , --col_desc
col_id NUMBER --col_id
);
insert into ttt values (t1,t1_col1,desc,1);
insert into ttt values (t1,t1_col2,desc,2);
insert into ttt values (t2,t2_col2,desc,2);
insert into ttt values (t2,t2_col1,desc,1);
insert into ttt values (t3,t3_col1,desc,1);
TTT 表里存的是表的定义;
现在要求把其中登记的每个表添加个字段,TEST_ADD
原来输出:
TAB_NAME TAB_COL COL_COMMENT COL_ID
t1 t1_col1 desc 1.00
t1 t1_col2 desc 2.00
t2 t2_col2 desc 2.00
t2 t2_col1 desc 1.00
t3 t3_col1 desc 1.00

要求添加字段后的输出
TAB_NAME TAB_COL COL_COMMENT COL_ID
t1 t1_col1 desc 1.00
t1 t1_col2 desc 2.00
t1 add_test desc 3.00
t2 t2_col1 desc 1.00
t2 t2_col2 desc 2.00
t2 add_test desc 3.00
t3 t3_col1 desc 1.00
t3 add_test desc 2.00
使用 分析函数能实现吗? [/B]


insert into ttt
select tab_name, 'add_test', 'desc',max(col_id)+1
from ttt
group by tab_name
试试
回复

使用道具 举报

千问 | 2009-12-28 22:11:19 | 显示全部楼层
晕,楼上的真是个人才!!
回复

使用道具 举报

千问 | 2009-12-28 22:11:19 | 显示全部楼层
最初由 ilovemk 发布
[B]晕,楼上的真是个人才!! [/B]

ft...
夸我还是损我??
回复

使用道具 举报

千问 | 2009-12-28 22:11:19 | 显示全部楼层
呵呵
回复

使用道具 举报

千问 | 2009-12-28 22:11:19 | 显示全部楼层
没必要用分析函数啊
回复

使用道具 举报

千问 | 2009-12-28 22:11:19 | 显示全部楼层
最初由 dinner1007 发布
[B]没必要用分析函数啊 [/B]

正在学习分析函数时,突然想起以前项目中的一个模块大概是这样的;
分析函数可以控制到partion byxxxx 中的行上,像这样
SELECTDEPTNO,ENAME,SAL,SUM(SAL) OVER(PARTITION BY DEPTNO ORDER BY ENAME ROWS 2 PRECEDING)
FROM SCOTT.EMP
ORDER BY DEPTNO,ENAME;
当前的值是包括前两行记录的值加上当前记录的值。

不知道如何控制到分区的最后一条记录的下一条记录,比如在其下,加上一行。
t1t1_col1
desc
1.00
t1t1_col2
desc
2.00
对t1t1_col2
desc
2.00
后的纪录如何控制其显示内容?
回复

使用道具 举报

千问 | 2009-12-28 22:11:19 | 显示全部楼层
用分析函数还是可以省时一点:
[php]
1select tab_name, nvl(tab_col, 'add_test') tab_col, nvl(col_comment, 'desc') col_comment,
2 count(*) over(partition by tab_name order by tab_col) col_id
3 from ttt
4 group by rollup((tab_name, col_comment), tab_col)
5*having tab_name is not null
SQL> /
TAB_NAME
TAB_COL
COL_COMMENT
COL_ID
------------------------- ------------------------------ ------------------------------ ----------
t1
t1_col1
desc
1
t1
t1_col2
desc
2
t1
add_test
desc
3
t2
t2_col1
desc
1
t2
t2_col2
desc
2
t2
add_test
desc
3
t3
t3_col1
desc
1
t3
add_test
desc
2
已选择8行。
SQL> select * from ttt;
TAB_NAME
TAB_COL
COL_COMMENT
COL_ID
------------------------- ------------------------------ ------------------------------ ----------
t1
t1_col1
desc
1
t1
t1_col2
desc
2
t2
t2_col2
desc
2
t2
t2_col1
desc
1
t3
t3_col1
desc
1
SQL>
[/php]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行