【问题标题】:I want a hierachical order in my output but dont know how?我想在我的输出中使用分层顺序但不知道如何?
【发布时间】:2018-10-20 22:21:33
【问题描述】:

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

我的数据:

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 开始。 p>

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;

【问题讨论】:

  • 那么应该生成输出的输入数据是什么?你试过什么? edit 点击下方的edit 链接您的问题。不要在 cmets 中发布代码
  • 问题不完整。您只向我们展示了运行查询后您希望看到的内容,而这里缺少的部分是您的原始表格的外观。如果您不愿意出示并告诉我们必须在什么基础上分配结果订单,则无法为您提供帮助。
  • 我愿意展示我的数据,但我不确定我必须描述得多么清楚。
  • 请检查我的回答并接受/赞成您认为它对您有帮助。请阅读:stackoverflow.com/help/someone-answers 以了解为什么它很重要。

标签: sql oracle


【解决方案1】:

在 MySQL 中,您通常会使用“order by”。因此,如果您想在表行“级别”上订购,您的语法将是这样的:

SELECT * FROM items ORDER BY level ASC

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

希望这会对您有所帮助。

【讨论】:

  • 我真的相信应该是这样......你能发布更多你的代码吗?
  • 没有它的作用是从 1 到 3 asc 的顺序,但我想要的是类似于我给出的输出
  • 您要订购名称吗?比你只需要像下面这样更改顺序。 SELECT Name, Level FROM Auction ORDER BY Name ASC
【解决方案2】:

你可以使用以下一个

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

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

【讨论】:

    【解决方案3】:

    我建议你这样做:

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

    希望对你有帮助

    【讨论】:

      【解决方案4】:

      目前尚不清楚这是否是您真正期望的。在我看来,从您的数据集中,您希望根据组件末尾的某种版本号对组件进行数字排序。如果这确实是您想要的,那么您可以忽略名称中的非数字字符,并按字符串末尾的纯数字排序(使用必需的 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这样的帖子中找到这样的例子

      注意:我要求您也请阅读说明here 以了解如何提出一个好的问题。这将避免那些试图理解和回答您的问题的人感到困惑。

      【讨论】:

      • 这里有一个主要类别,命名为汽车和计算机。第二类是组件,第三类是第二个组件。我想要的是,先“打印”出较少的钱,依此类推。但请注意类别。 “打印”第一个类别(如果它较少),然后是它的组件,然后是其他类别。如果我输入的内容有意义,我希望如此
      • @Mundo.Corjellito :恐怕这对我来说不再清楚了。在我看来,您的要求每过一次都在不断变化,当您说“先少的钱等等。”之类的话时,您仍然试图弄清楚自己想要什么。我希望我能帮助你,但我不会,因为我不能再努力尝试破译这个问题了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-11
      • 2022-06-22
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      • 2020-09-03
      • 1970-01-01
      相关资源
      最近更新 更多