【发布时间】:2017-07-10 19:36:47
【问题描述】:
您好,我在 Oracle 数据库中有视图的这一部分,我必须在 Microsoft Sql Server 上更改它。
with V_LOCHIERARHY_N
(nr, nivel, location, parent, systemid, siteid, orgid, count_a, count_wo, children)
AS
SELECT LEVEL, LPAD (' ', 2 * (LEVEL - 1)) || l.LOCATION nivel,
LOCATION, PARENT, systemid, siteid, orgid,
(SELECT COUNT (a.ancestor)
FROM locancestor a
WHERE a.LOCATION = l.LOCATION AND a.siteid = l.siteid),
NVL (COUNT (w.wonum), 0)
FROM maximo.workorder w
WHERE ( w.reportdate >
TO_TIMESTAMP ('2006-06-19 00:00:01',
'YYYY-MM-DD HH24:MI:SS.FF'
)
AND w.istask = 0
AND w.worktype <> 'P'
AND w.LOCATION = l.LOCATION
)
AND w.status <> 'CAN'),
l.children
FROM lochierarchy l
START WITH l.LOCATION = 'StartPoint'
CONNECT BY PRIOR l.LOCATION = l.PARENT AND l.siteid = 'SiteTest'
我需要从这个脚本中返回给定条目的所有子项(可以在位置表中找到子项的描述)。
我有一个包含下一列的表格:
Location Parent Systemid Children Siteid Origid Lochierarchyid
A001 StartPoint Primary 2 SiteTest X 106372
A002 A001 Primary 2 SiteTest X 105472
A003 A002 Primary 0 SiteTest X 98654
A004 A002 Primary 1 SiteTest X 875543
A004B A004 Primary 0 SiteTest X 443216
B005 StartPoint Primary 0 SiteTest X 544321
例如对于给定的条目 A001 将返回
A002
A003
A004
A004B
B005
我在下面制作了这个视图,但我不知道如何将它与第一个集成。它也不会以正确的顺序返回我的列表
Parent
Children 1 of parent
Children a of children 1
children b of children 1
children 2 of parent
children a1 of children 2 and so on.
WITH testCTE AS
(
SELECT l.parent, l.location as child, l.location, l.lochierarchyid
FROM lochierarchy l
where location='SecondLocation' --and siteid='SiteTest'
UNION ALL
SELECT c.Parent, l.parent, l.location, l.lochierarchyid
FROM lochierarchy l
INNER JOIN testCTE c ON l.parent = c.location
)
SELECT *
FROM testCTE c
order BY c.parent,child asc
;
请有人帮助我吗? :)
【问题讨论】:
-
如果我有时间,我会研究解决方案。在一些帮助下,您也可以自己解决。下面的文章逐步展示了如何使用递归子查询分解重现“连接方式”查询的所有功能:oracle-base.com/articles/11g/recursive-subquery-factoring-11gr2
-
请不要不要破坏您的帖子。
标签: sql-server oracle select sql-view connect-by