Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 按父级和子级查询订单_Sql_Sql Server - Fatal编程技术网

Sql 按父级和子级查询订单

Sql 按父级和子级查询订单,sql,sql-server,Sql,Sql Server,我正在开发一个查询,我想通过父对象和子对象进行排序,但我遇到了一个问题。他点的菜不对 这是我的问题 WITH CLASSIFICATION_LIST AS ( SELECT SUBPARENT.[ID], SUBPARENT.[NAME], SUBPARENT.[PARENTID], 1 AS LEVELCLASSIFICATION, SUBPARENT.[ID] AS HIERARCHY, SUBPARENT.[ISACTIVE]

我正在开发一个查询,我想通过父对象和子对象进行排序,但我遇到了一个问题。他点的菜不对

这是我的问题

    WITH CLASSIFICATION_LIST AS
(
    SELECT SUBPARENT.[ID], SUBPARENT.[NAME], SUBPARENT.[PARENTID], 
           1 AS LEVELCLASSIFICATION, SUBPARENT.[ID] AS HIERARCHY,
           SUBPARENT.[ISACTIVE]
    FROM {Classification} AS SUBPARENT
    WHERE SUBPARENT.[PARENTID] IS NULL
    AND (@ShowAll = 1 OR SUBPARENT.ISACTIVE = 1)

    UNION ALL

    SELECT CHILD.[ID], CHILD.[NAME], CHILD.[PARENTID],
            EL.LEVELCLASSIFICATION+1 , EL.HIERARCHY,  CHILD.[ISACTIVE]
    FROM {Classification} AS CHILD    
             INNER JOIN CLASSIFICATION_LIST AS EL ON CHILD.[PARENTID] = EL.[ID]
    WHERE CHILD.[PARENTID] IS NOT NULL
    AND (@ShowAll = 1 OR CHILD.ISACTIVE = 1)

)
SELECT *
FROM CLASSIFICATION_LIST
ORDER BY 5,4,1
以下是查询输出:

正确的输出是:

Teste
  Filho 1
  Filho 2
Computador
  Motherboard
  Grafica
      Memoria
  Memoria

我做错了什么?

请注意,您是按5,4,1排序的,即在您的案例层次结构中,按级别排序,然后按分类Id排序。 如果你敏锐地注意到,你会在标记的记录中看到,排序是因为级别不同


因此,如果您希望它们以不同的方式排序(可能仅按分类Id排序),则应使用
按1排序

,而不是按列序号排序,应按列名称排序,由于更改列顺序更容易阅读,也不容易中断,因此请在ORDERBY子句中使用名称,而不是ORDENIAL位置。在ORDER BY子句中使用序号位置被认为是不好的做法,并且会降低可读性。如果您能为我们提供一个示例数据集,那么解决问题就更容易了。我的直觉是你需要一起删除你的订单,递归CTE应该处理它。同意@Abris-请。或者更好的
orderbyclassificationid