oracle 我想在我的输出层次顺序,但不知道如何?

mjqavswn  于 2023-11-17  发布在  Oracle
关注(0)|答案(4)|浏览(171)

我希望在输出中有一个像这样的层次顺序:

  • 我的资料:*
Name            | Cost   | Level 
----------------+--------+------
Car1            | 2000   |   1
 Component1.1   | 3000   |   2
  Component1.2  | 2300   |   3
Computer2       | 5000   |   1
 Component2.1   | 2000   |   2
  Component2.2  | Null   |   3

字符串

  • 输出:显示所有这些数据,其中有钱,并按级别排序,比如首先是1,然后是2,然后是3,然后再从1开始。
Name              | Level
------------------+------
Car1              |   1
 Component1.1     |   2
  Component1.2    |   3
Computer          |   1
 Component2.1     |   2

  • ORDER BY做的是:*
Name            | Level
----------------+------
Car1            |   1
Computer1       |   1
Component1.1    |   2
Component2.1    |   2
Component1.2    |   3
Component2.2    |   3

  • 我尝试了CONNECT BY PRIOR功能,但效果不好 *
SELECT Name, Level
   FROM Product
CONNECT BY PRIOR Level;

j7dteeu8

j7dteeu81#

你可以用下面一个

SELECT Name, Level
FROM Auction
ORDER BY Name, Level
WHERE Money!='Null' ;

字符串
按名称排序将按层次顺序打印结果,但是如果它有一个名为parent id的列,那么它会更容易显示。

idv4meu8

idv4meu82#

我建议你:

SELECT Name, Level FROM Product ORDER BY Name, Level WHERE Money!='Null' ASC;

字符串

ukqbszuj

ukqbszuj3#

在MySQL中,你通常会使用“order by”。所以如果你想在表行“level”上排序,你的语法会是这样的:

SELECT * FROM items ORDER BY level ASC

字符串
您可以使用ASC(升序)或DESC(降序)。

ss2ws0br

ss2ws0br4#

在我看来,从你的数据集中,你想根据组件末尾的版本号对组件进行数字排序。如果这是你真正想要的,那么你可以忽略名称中的非数字字符,并按照字符串末尾的纯数字进行排序(使用必需的where子句)。

ORDER BY REPLACE ( name, TRANSLATE(name,' .0123456789',' '),'');

字符串
如果是这样的话,那么将level也添加到ORDER BY应该不会有任何区别,除非你的版本和级别的数字顺序是同步的。
如果你有像component2_name1.2这样的组件可能会打破这个逻辑,你可能需要REGEXP来识别所需的模式,那么可能会出现问题。但是,从你的数据来看,情况并非如此,我假设是这种情况,你可能想澄清一下,如果这不是你在数据集中总是有的话。
下面是对样本数据获得的结果的演示。

Demo

这将工作的数字字符始终是一个有效的小数点,只有一个小数点。如果你有复杂的版本控制系统,如1.1.82.1.1等,它需要在REPLACE ( name, TRANSLATE(name,' .0123456789',' '),'')之上复杂的排序。
你会在像Here这样的帖子中找到这样的例子

相关问题