父母和子女的订单查询

时间:2014-01-31 15:45:17

标签: sql sql-server

我正在开发一个查询,我想通过parent和subParent订购,但我有一个问题。订货不对。

继承我的查询

    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

继承查询输出:

Query Output

正确的输出是:

Teste
  Filho 1
  Filho 2
Computador
  Motherboard
  Grafica
      Memoria
  Memoria

我做错了什么?

1 个答案:

答案 0 :(得分:0)

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

因此,如果您希望以不同的方式对它们进行排序,可能只有分类ID,则应使用ORDER BY 1