【发布时间】:2021-04-07 16:39:59
【问题描述】:
我正在处理 BOM(用于文档,所以我称其为 BOD),并且我希望在树视图中得到数据,因此我需要对 BOM 进行分解并按每个级别进行排序。我不知道如何让排序正常工作
我在 SSMS 工作
我有一个观点;
[ParentDocumentTitle], [ParentDocumentName], [ChildDocumentTitle], [ChildDocumentName], [PDFFilePath],所有Nvarchar
然后我有 SQL 查询
--alter procedure [dbo].[GetBODSummaryLevels]
IF EXISTS(SELECT [name] FROM tempdb.sys.tables WHERE [name] like '#BODSummary%')
BEGIN
DROP TABLE #BODSummary;
END;
DECLARE
@ParentDocTitle nvarchar(50),
@level int
SET @ParentDocTitle = 'Test Book';
SET @level = 10;
--as
begin
WITH RPL (
[Level],
[ParentDocumentTitle],
[ParentDocumentName],
[ChildDocumentTitle],
[ChildDocumentName],
[PDFFilePath])
AS
( SELECT
0,
ROOT.[ParentDocumentTitle],
ROOT.[ParentDocumentName],
ROOT.[ChildDocumentTitle],
ROOT.[ChildDocumentName],
ROOT.[PDFFilePath]
FROM [WorkInstruictionManagerDB].[dbo].[BOD] ROOT
WHERE ROOT.[ParentDocumentTitle] = @ParentDocTitle
UNION ALL
SELECT
Parent.Level+1,
CHILD.[ParentDocumentTitle],
CHILD.[ParentDocumentName],
CHILD.[ChildDocumentTitle],
CHILD.[ChildDocumentName],
CHILD.[PDFFilePath]
FROM RPL PARENT, [WorkInstruictionManagerDB].[dbo].[BOD] CHILD
WHERE PARENT.[ChildDocumentTitle] = CHILD.[ParentDocumentTitle]and PARENT.Level<@level
)
SELECT
[Level] as bodlevel,
[ParentDocumentTitle] as pt,
[ParentDocumentName] as pn,
[ChildDocumentTitle] as ct,
[ChildDocumentName] as cn,
[PDFFilePath] as pdf
into #BODSummary
FROM RPL
Select * From #BODSummary
end
这提供了正确的信息,但我不知道如何对这些信息进行排序,以便子项显示在父项下方。
我遗漏了什么或者干脆做错了什么?
【问题讨论】:
-
您已经拥有
Level并且您知道0是父级。那么你尝试排序的是什么? -
我尝试使用 group by 和 order by 任意数量的字段,但我最终得到了数字顺序,但我需要文档按层次顺序排列,我无法弄清楚
标签: sql recursive-query byte-order-mark