【发布时间】:2011-11-17 18:21:02
【问题描述】:
我正在尝试创建一个 SQL 语句,它将在 SilkCentral 测试管理器中重新创建分层容器/文件夹/测试结构。
- 测试容器没有 ParentID
- 测试文件夹包含 ParentID 和 IsLeaf = 0
- 测试包含 ParentID 和 IsLeaf = 1
此查询会产生所有测试容器、文件夹和测试:
SELECT "NodeID", "ParentID", "Name", "IsLeaf", "OrderNumber"
FROM "Silk"."TM_TestPlanNodes" AS TPN
WHERE PROJECTID = 36
ORDER BY "ParentID", "OrderNumber", "IsLeaf"
以下是部分结果:
NodeID ParentID Name IsLeaf OrderNumber
65408 Installation and Upgrades 0 0
65445 Connectivity 0 1
65448 Focus 0 2
65409 GINA / PLAP 0 3
65446 Graphical User Interface 0 4
71038 Login Properties 0 5
65449 Miscellaneous 0 6
70636 Net Firewall 0 7
70998 Software Updates 0 8
65447 Third-party Services 0 9
70805 SilkTest Automated Tests 0 10
68812 65408 0. Setup 0 0
65454 65408 1. Installations & Upgrades 0 1
65450 65408 Typical/Custom Installation 0 2
我想要这个顺序:
ParentID 已排序,但如果存在 ParentID=thePreviousNode'sID 的 Node,则选择下一个。如果有多个这样的节点,它们应该按 IsLeaf 排序,然后按 OrderNumber。
如何做到这一点?我能做的非常有限,因为我认为非常复杂的语法最终会在 Silk 中引发错误。我打算尝试一个嵌套的 SELECT 语句:
SELECT "NodeID", "ParentID", "Name","IsLeaf"
FROM "Silk"."TM_TestPlanNodes"
WHERE PROJECTID = '36'AND ParentID LIKE (
SELECT ParentID
FROM "Silk"."TM_TestPlanNodes"
WHERE NAME = 'Installation and Upgrades')
但出现此错误:“无法执行报告查询:子查询返回超过 1 个值。当子查询遵循 =、!=、、>= 或子查询时,这是不允许的用作表达式。”
这就是我摆弄 Order By 的原因。
【问题讨论】:
标签: sql sql-order-by