Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/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
TSQL版本2008-R2-递归选择_Tsql_Sql Server 2008 R2 - Fatal编程技术网

TSQL版本2008-R2-递归选择

TSQL版本2008-R2-递归选择,tsql,sql-server-2008-r2,Tsql,Sql Server 2008 R2,问题1: 检索属于ItemID=1的所有记录及其所有递归的子项和按父项排序的最简单方法是什么 问题2: 最简单的方法是检索所有记录按父母身份排序 非常感谢…先进的 您需要的是使用一个公共表表达式来执行分层查询 DECLARE @MAIN TABLE ( MainID INT NOT NULL, Name VARCHAR(20) NOT NULL, [Deleted] BIT NOT NULL ); DECLARE @ITEMS TABLE ( ItemID INT NOT N

问题1:
检索属于ItemID=1的所有记录及其所有递归的子项和按父项排序的最简单方法是什么

问题2:
最简单的方法是检索所有记录按父母身份排序


非常感谢…先进的

您需要的是使用一个公共表表达式来执行分层查询

DECLARE @MAIN TABLE
(
  MainID INT NOT NULL, 
  Name VARCHAR(20) NOT NULL,
  [Deleted] BIT NOT NULL
);

DECLARE @ITEMS TABLE
(
  ItemID INT NOT NULL, 
  ParentItemID INT NULL,
  MainID INT NOT NULL, 
  Data VARCHAR(100) NOT NULL
);


INSERT INTO @MAIN (MainID, Name, [Deleted]) VALUES  (1, 'Tool 1', 0)
INSERT INTO @MAIN (MainID, Name, [Deleted]) VALUES  (2, 'Tool 2', 0)

INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (1, NULL, 1, 'Level 1')
INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (2, NULL, 1, 'Level 2')
INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (3, NULL, 2, 'Level 1 - Irrelevant')
INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (4, NULL, 1, 'Level 3')

INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (5, 1, 1, 'Item 1-A')
INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (6, 4, 1, 'Item 2-C')
INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (7, 7, 2, 'Item Irrelevant 1')
INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (8, 10, 1, 'Item 3-E')

INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (9, 1, 1, 'Item 1-B')
INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (10, 4, 1, 'Item 2-D')
INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (11, 7, 2, 'Item Irrelevant 2')
INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (12, 10, 1, 'Item 3-F')

INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (13, 5, 1, 'Item 1-A-1')
INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (14, 8, 1, 'Item 2-C-1')
INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (15, 5, 2, 'Item 1-A-2')
INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (16, 9, 1, 'Item 1-B-1')


SELECT * FROM @MAIN
SELECT * FROM @ITEMS


您需要的是使用一个公共表表达式来执行分层查询

DECLARE @MAIN TABLE
(
  MainID INT NOT NULL, 
  Name VARCHAR(20) NOT NULL,
  [Deleted] BIT NOT NULL
);

DECLARE @ITEMS TABLE
(
  ItemID INT NOT NULL, 
  ParentItemID INT NULL,
  MainID INT NOT NULL, 
  Data VARCHAR(100) NOT NULL
);


INSERT INTO @MAIN (MainID, Name, [Deleted]) VALUES  (1, 'Tool 1', 0)
INSERT INTO @MAIN (MainID, Name, [Deleted]) VALUES  (2, 'Tool 2', 0)

INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (1, NULL, 1, 'Level 1')
INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (2, NULL, 1, 'Level 2')
INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (3, NULL, 2, 'Level 1 - Irrelevant')
INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (4, NULL, 1, 'Level 3')

INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (5, 1, 1, 'Item 1-A')
INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (6, 4, 1, 'Item 2-C')
INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (7, 7, 2, 'Item Irrelevant 1')
INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (8, 10, 1, 'Item 3-E')

INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (9, 1, 1, 'Item 1-B')
INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (10, 4, 1, 'Item 2-D')
INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (11, 7, 2, 'Item Irrelevant 2')
INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (12, 10, 1, 'Item 3-F')

INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (13, 5, 1, 'Item 1-A-1')
INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (14, 8, 1, 'Item 2-C-1')
INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (15, 5, 2, 'Item 1-A-2')
INSERT INTO @ITEMS (ItemID, ParentItemID, MainID, Data) VALUES (16, 9, 1, 'Item 1-B-1')


SELECT * FROM @MAIN
SELECT * FROM @ITEMS


我不知道“父母之命”是什么意思。一些预期顺序的示例输出将非常有用。这是指ParentItemId还是其他什么?大约在文章的一半,您会发现
HierarchyId
。这是获得我想你想要的订单的关键。当然,我所说的父母身份是指ParendItemID,因此所有项目都是由其父母订购的,并且根父母在顶部。我不确定“父母身份订单”是什么意思。一些预期顺序的示例输出将非常有用。这是指ParentItemId还是其他什么?大约在文章的一半,您会发现
HierarchyId
。这是获得你想要的订单的关键当然我说的为人父母是指ParendItemID,因此,所有项目都是由其父项排序的,并且根父项位于顶部。非常感谢您的及时回复,非常感谢您向我展示了Fiddle for SQL:-)看起来它需要一个
ORDER by
子句。非常感谢您的及时回复,非常感谢您向我展示了Fiddle for SQL:--)看起来它需要一个
ORDER BY
子句。