Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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 server 分层排序表_Sql Server_Sorting_Hierarchical Data_Hierarchical Query - Fatal编程技术网

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的列吗?如果是,是自动增量吗?谢谢