假设这是我的桌子:
Name | Surname | Serial no. | Price
-----------------------------------------------
John | Smith | A12444dW33 | 1,234
Paul | Harrison | D2344fGGfd | 2,5
Richard | Morris | We945kfGGE | 3
George | Washington | ssf4gt66hJ | 7,39494
如何根据长度获取 ONE 行中每一列的实际 LONGEST 值?
我需要对每种数据类型均有效的内容- NUMBER,VARCHAR,DATE 等。
示例表的输出应为(序列号都相同的长度,因此在这里不重要...):
Name | Surname | Serial no. | Price
-----------------------------------------------
Richard | Washington | A12444dW33 | 7,39494
我发现的所有问题都只针对一列,但我需要所有列的解决方案。
答案 0 :(得分:3)
您可以使用keep
:
select max(name) keep (dense_rank first order by length(name) desc),
max(Surname) keep (dense_rank first order by length(Surname) desc),
max(serial) keep (dense_rank first order by length(serial) desc),
max(price) keep (dense_rank first order by length(price) desc)
from t;
答案 1 :(得分:3)
您可以使用MAX( column ) KEEP ( DENSE_RANK [FIRST|LAST] ORDER BY ... )
:
SELECT MAX( Name ) KEEP ( DENSE_RANK FIRST ORDER BY LENGTH( Name ) DESC ) AS Name,
MAX( Surname ) KEEP ( DENSE_RANK FIRST ORDER BY LENGTH( Surname ) DESC ) AS Surname,
MAX( Serial_no ) KEEP ( DENSE_RANK FIRST ORDER BY LENGTH( Serial_no ) DESC ) AS serial_no,
MAX( Price ) KEEP ( DENSE_RANK FIRST ORDER BY LENGTH( Price ) DESC ) AS Price
FROM your_table;
输出:
NAME | SURNAME | SERIAL_NO | PRICE :------ | :--------- | :--------- | ------: Richard | Washington | ssf4gt66hJ | 7.39494
db <>提琴here