这样的sql语句怎么写呢

[复制链接]
查看11 | 回复4 | 2008-2-13 12:43:03 | 显示全部楼层 |阅读模式
大家好,
我现在想把库中所有的index的信息倒出来,具体导出成这样的形式:
1. Table1,Index1,Id.Nsid
2. Table1,Index2,Firstname.Lastname
....
也就是说每一行体现每一个index上的列,可能有多列,这样我们用一个点分开
应该要用到user_indexes和user_ind_columns的关联,可是不知道如何吧所有的索引上的列放到一行里
请大家帮帮忙想想,要是真的没办法的话只能写个存储过程了。
谢谢
回复

使用道具 举报

千问 | 2008-2-13 12:43:03 | 显示全部楼层

如下:
SQL> select ui.table_name,
2 wmsys.wm_concat(ui.index_name) index_name
3from user_indexes ui,
4 user_ind_columns uic
5 where ui.table_name = uic.table_name
6group by ui.table_name;
TABLE_NAME
INDEX_NAME
------------------------------ --------------------------------------------------------------------------------
DEPT
PK_DEPT
EMP
IDX_EMP_DEPTNO,PK_EMP,IDX_EMP_DEPTNO,PK_EMP
TIMESHEETS
SYS_C005455
TT
PK_A_B,PK_A_B
SQL>


回复

使用道具 举报

千问 | 2008-2-13 12:43:03 | 显示全部楼层
谢谢
我找到了两种办法,呵呵
回复

使用道具 举报

千问 | 2008-2-13 12:43:03 | 显示全部楼层
方法一:
SELECT t1.table_name, t1.index_name, wmsys.wm_concat(t2.column_name) column_name
from user_indexes t1, user_ind_columns t2
where t1.table_name = t2.table_name
and t1.index_name = t2.index_name
group by t1.table_name, t1.index_name;
方法二:
SELECT t1.table_name, t1.index_name, SUBSTR (MAX (SYS_CONNECT_BY_PATH (t1.column_name, ';')), 2) column_name
FROM (SELECT a.table_name, a.index_name, a.column_name, ROW_NUMBER () OVER (PARTITION BY a.index_name ORDER BY a.column_name) rn
FROM user_ind_columns a) t1
START WITH t1.rn = 1
CONNECT BY t1.index_name = PRIOR t1.index_name AND t1.rn - 1 = PRIOR t1.rn
GROUP BY t1.table_name, t1.index_name;
回复

使用道具 举报

千问 | 2008-2-13 12:43:03 | 显示全部楼层
搜索行转列,学习下,有个精华文章很不错
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行