Sql server 分层排序表
是否可以按如下分层顺序对查询表进行排序: 期望Sql server 分层排序表,sql-server,sorting,hierarchical-data,hierarchical-query,Sql Server,Sorting,Hierarchical Data,Hierarchical Query,是否可以按如下分层顺序对查询表进行排序: 期望 +----+--------+-----------+-------+--------+-----------+-----------+---------+ | ID | Code | Name | Qty | Amount | is_parent | parent_id | remarks | +----+--------+-----------+-------+--------+-----------+-----------+
+----+--------+-----------+-------+--------+-----------+-----------+---------+
| 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生成数据。看起来实际的问题是如何按层次顺序查询数据。这是可以使用的,但更快的替代方法是使用SQL Server对的支持 按分层顺序返回数据的递归查询如下所示:
WITH h AS
(
SELECT
ID,Code,Name,Qty,Amount,is_parent,parent_id,remarks
FROM
dbo.ThatTable
WHERE
parent_id=0
UNION ALL
SELECT
c.ID,c.Code,c.Name,c.Qty,c.Amount,c.is_parent,c.parent_id,c.remarks
FROM
dbo.ThatTable c
INNER JOIN h ON
c.parent_id= h.Id
)
SELECT * FROM h
如果对ID
和Parent\u ID
字段进行了索引,则此查询的性能可以接受,但不是很好
向表中添加hierarchyid
字段将使查询更简单、速度更快。假设有一个层次结构
字段,查询将是:
SELECT *
FROM ThatTable
ORDER BY hierarchy
在层次结构上添加索引
将非常快速地完成此查询以及任何查找特定节点的子节点的查询。服务器只需要查看单个索引,而不是递归查询
本文展示了如何使用
hierarchyid
创建一个新表,并从父/子数据填充它 解释不清楚。不过,结果看起来像是一个分层顺序,如果键具有可排序的格式,则可以通过简单的order BY code
来实现-您必须确保ID值由相同的位数表示,并在需要时填充0
。@PanagiotisKanavos如果代码有随机字符串怎么办?更好的选择是用字段替换code
hierarchyid
是一个二进制值,其内容反映了层次结构,可以对其进行排序和索引。您想从什么开始?解释不清楚。结果显示了分层排序。现在,code
似乎是层次结构的关键。也许真正的问题是如何遍历层次结构?添加hierarchyid
字段或使用。hierarchyid是一个更快的解决方案。请检查。该部分包含一个递归查询,该查询首先遵循层次结构深度生成新的hierarchyid
值。应用此查询时,该查询未运行。。出现错误“关键字“WITH.”附近的语法不正确”。我该怎么办?在运行该查询之前,我必须做些什么?我应该在该表中添加一个名为hierarchyid的列吗?如果是,是自动增量吗?谢谢