【发布时间】:2019-10-04 08:49:20
【问题描述】:
是否可以像这样按层次顺序对查询表进行排序:
预期
+----+--------+-----------+-------+--------+-----------+-----------+---------+
| ID | Code | Name | Qty | Amount | is_parent | parent_id | remarks |
+----+--------+-----------+-------+--------+-----------+-----------+---------+
| 1 | ABC | Parent1 | 2 | 1,000 | 1 | 0 | xxx |
+----+--------+-----------+-------+--------+-----------+-----------+---------+
| 4 | FFLK | Product Z | 10 | 2,500 | 0 | 1 | xxx |
+----+--------+-----------+-------+--------+-----------+-----------+---------+
| 5 | P6DT | Product 5 | 7 | 1,700 | 0 | 1 | xxx |
+----+--------+-----------+-------+--------+-----------+-----------+---------+
| 6 | P2GL | Product T | 5 | 1,100 | 0 | 1 | xxx |
+----+--------+-----------+-------+--------+-----------+-----------+---------+
| 2 | DHG | Parent2 | 5 | 1,500 | 1 | 0 | xxx |
+----+--------+-----------+-------+--------+-----------+-----------+---------+
| 3 | LMSJ | Product U | 4 | 600 | 0 | 2 | xxx |
+----+--------+-----------+-------+--------+-----------+-----------+---------+
这是原始数据表:
+----+--------+-----------+-------+--------+-----------+-----------+---------+
| ID | Code | Name | Qty | Amount | is_parent | parent_id | remarks |
+----+--------+-----------+-------+--------+-----------+-----------+---------+
| 1 | ABC | Parent1 | 2 | 1,000 | 1 | 0 | xxx |
+----+--------+-----------+-------+--------+-----------+-----------+---------+
| 2 | DHG | Parent2 | 5 | 1,500 | 1 | 0 | xxx |
+----+--------+-----------+-------+--------+-----------+-----------+---------+
| 3 | LMSJ | Product U | 4 | 600 | 0 | 2 | xxx |
+----+--------+-----------+-------+--------+-----------+-----------+---------+
| 4 | FFLK | Product Z | 10 | 2,500 | 0 | 1 | xxx |
+----+--------+-----------+-------+--------+-----------+-----------+---------+
| 5 | P6DT | Product 5 | 7 | 1,700 | 0 | 1 | xxx |
+----+--------+-----------+-------+--------+-----------+-----------+---------+
| 6 | P2GL | Product T | 5 | 1,100 | 0 | 1 | xxx |
+----+--------+-----------+-------+--------+-----------+-----------+---------+
is_parent column = 1 if data row set to parent, 0 if data row set to child
parent_id column = 0 if data row set to parent, depend on ID of parent data
我正在使用 SQL Server 生成数据。
【问题讨论】:
-
解释不清楚。虽然结果看起来像一个分层顺序,但如果键具有可排序格式,则可以使用简单的
ORDER BY Code来实现 - 您必须确保 ID 值由相同数量的数字表示,并在需要时用0填充. -
@PanagiotisKanavos 如果代码有随机字符串怎么办?
-
更好的选择是将
Code替换为hierarchyid 字段。hierarchyid是一个二进制值,其内容反映了层次结构,可以进行排序和索引。 -
你想从什么开始做?解释不清楚。结果显示分层排序。现在
Code似乎是层次结构的关键。也许真正的 问题是如何遍历层次结构?添加hierarchyid字段或使用a recursive CTE。 hierarchyid 是一种更快的解决方案。 -
检查Lesson 1: Converting a Table to a Hierarchical Structure。 Populate 部分包含一个递归查询,该查询遵循层次结构深度优先以生成新的
hierarchyid值。
标签: sql-server sorting hierarchical-data hierarchical-query