【发布时间】:2018-10-22 12:24:20
【问题描述】:
我对 SQL 还很陌生,所以我不确定这是否可行。我有一个分层数据库,我正在尝试构建一个查询,该查询将按此层次结构对结果进行排序。
我不能按“TreeLevel”列排序(请参见下面的示例),因为这样孩子将与父母分开。此外,所需的顺序取决于各种表中的不同列,因此就我目前的知识而言,cte 变得更加复杂。
+-----------+---------+-------------+
| TreeLevel | Code | Parent Code |
+-----------+---------+-------------+
| 1 | 0770.1 | |
| 2 | 0770.50 | 0770.1 |
| 3 | 0804.5 | 0770.50 |
| 2 | 0770.12 | 0770.1 |
| 1 | 0891.1 | |
| 2 | 0980 | 0891.1 |
+-----------+---------+-------------+
我想通过确定 TreeLevel AT 每行的出现次数来进行排序。因此,对于 TreeLevel 中的第二个“2”,这个数字应该是 2。但是,对于第三个 2,这个数字应该是 3。这有可能吗?
提前致谢
编辑:
这是我现在拥有的 SQL:
Select ChildComp.TreeLevel,
ChildComp.Code,
ISNULL(ChildComp.Specification, '') AS Specification,
dbo.stkCommodities.Code as 'Stock Item Commodity Code',
CASE WHEN ISNULL(dbo.stkCategories.Code,'') = 'SA-NP' THEN 'SA-NP' ELSE '' END AS 'Category Code',
ChildComp.Quantity,
LEFT(ChildComp.Description, CHARINDEX(' -', ChildComp.Description, 1)) as posnr,
stkStockItems.Description as 'Stock Item Description',
ParentComp.Code AS 'Parent Component Code',
CASE WHEN ISNULL(ChildComp.Specification, '') = '' Then ParentComp.Code Else CONCAT(ParentComp.Code, '_', ISNULL(ChildComp.Specification, '')) END AS 'Component Code + Rev'
From dbo.astComponents AS ChildComp
LEFT Join dbo.astAssets ON ChildComp.AssetId = astAssets.Id
LEFT Join dbo.stkStockItems ON ChildComp.Code = stkStockItems.Code
LEFT Join dbo.stkCommodities ON stkStockItems.CommodityId = stkCommodities.Id
LEFT Join dbo.stkCategories ON stkStockItems.CategoryId = stkCategories.Id
LEFT Join dbo.astComponents AS ParentComp ON ChildComp.ParentComponentId = ParentComp.Id
LEFT Join dbo.stkStockItems As ParentItems ON ParentComp.Code = ParentItems.Code
LEFT Join dbo.stkCommodities AS ParentCom ON ParentItems.CommodityId = ParentCom.Id
Where astAssets.Code = '2018010084' AND (dbo.stkCommodities.Code <> 'RM' OR dbo.stkCommodities.Code IS NULL ) AND
(ParentCom.Code <> 'WA' OR ParentCom.Code IS NULL )
表格:
很抱歉将表格共享为链接,但这些表格确实很长
【问题讨论】:
-
那么,对于您的示例数据,您的顺序是什么?
-
我要的顺序如示例所示。
-
如何使用递归选择获得当前结果?
-
我目前没有任何按我想要的方式排序的结果,否则我不会问! :) 我正在考虑做一个 ORDER BY CASE
-
您所显示的是预期的结果。那么你能告诉我们样本数据是什么样子的吗?
标签: sql sql-server tsql count