I have got this following query:
COLUMN INDEX_NAME FORMAT A15 HEADING "INDEX_NAME"
COLUMN COLUMN_NAME FORMAT A15 HEADING "COLUMN_NAME"
COLUMN COLUMN_POSITION FORMAT 999999 HEADING "COLUMN_POSITION"
SELECT INDEX_NAME, COLUMN_NAME, COLUMN_POSITION
FROM ALL_IND_COLUMNS
WHERE TABLE_OWNER = 'ABC'
The returned result is as follows:
INDEX_NAME COLUMN_NAME COLUMN_POSITION
--------------- --------------- ---------------
SYS_C007963 C_UNAME 1
ORDER_LINE_PKEY OL_ID 1
ORDER_LINE_PKEY OL_O_ID 2
ORDERS_PKEY O_ID 1
ITEM_PKEY I_ID 1
CUSTOMER_PKEY C_ID 1
COUNTRY_PKEY CO_ID 1
CC_XACTS_PKEY CX_O_ID 1
AUTHOR_PKEY A_ID 1
ADDRESS_PKEY ADDR_ID 1
10 rows selected
How do i change the sql statement such that it will sort according to the number of repeated INDEX_NAME in ascending order?
For example like this:
INDEX_NAME COLUMN_NAME COLUMN_POSITION
--------------- --------------- ---------------
SYS_C007963 C_UNAME 1
ORDERS_PKEY O_ID 1
ITEM_PKEY I_ID 1
CUSTOMER_PKEY C_ID 1
COUNTRY_PKEY CO_ID 1
CC_XACTS_PKEY CX_O_ID 1
AUTHOR_PKEY A_ID 1
ADDRESS_PKEY ADDR_ID 1
ORDER_LINE_PKEY OL_ID 1
ORDER_LINE_PKEY OL_O_ID 2
10 rows selected
You can count the number for each index and then order by that:
select INDEX_NAME, COLUMN_NAME, COLUMN_POSITION
FROM (SELECT INDEX_NAME, COLUMN_NAME, COLUMN_POSITION,
count(*) over (partition by INDEX_NAME) as cnt
FROM ALL_IND_COLUMNS
WHERE TABLE_OWNER = 'ABC'
) t
order by cnt, INDEX_NAME
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.