我运行以下查询
Select * From
(
Select
GUID,
MFG_CODE,
STK_NAME,
parentid,
masteritem,
ROW_NUMBER() over(order by guid) r
From Fstock Where MasterItem=1 OR isNull(parentID, '')=''
) a
Where r between 4716 And 4716
我得到以下结果
GUID MFG_CODE parentid masteritem r
31955 369553 0 1 4717
正如您所看到的,GUID 31955
实际上是parentITEM
&我需要在同一个查询中引入这个父项的所有子项。
例如,如果我这样做:
Select * From Fstock where parentID = 31955
它返回3个孩子
GUID
31956
31957
31958
那么有没有办法将这两个查询组合在一起,我只想使用row_number()
函数返回固定数量的行,但是这些返回的行有时包含Parent ITem
,我想返回这些父项的子项也在同一查询中。
性能对我来说非常重要。
---编辑---- 我让它与以下查询一起工作,有没有人有其他想法?
With CTE
As
(
Select
GUID,
Manufacturer,
SELL_PRICE,
MFG_CODE,
parentid,
masteritem,
ROW_NUMBER() over(order by GUID) r
From Fstock Where MasterItem=1 OR isNull(parentID, '')=''
)
Select A.*,F.parentID From
(
Select * From CTE
Where r between 4717 And 6000
) A
Left join Fstock F on F.parentID = A.GUID
Order by A.r
答案 0 :(得分:0)
这是粗略的,未经测试,但我相信你正在寻找一个递归的公用表表达式(CTE),它将为你结合父子关系。现在,原则上,这并没有集成您提到的在返回“固定行数”方面的任何行限制,我不确定如何解释,但下面的基本查询应该是您的开始。
With Products(GUID, MFG_CODE,STK_NAME, parentid,masteritem)
as
(
Select GUID,MFG_CODE,STK_NAME,parentid,masteritem
from fstock
where masteritem=1 OR isNull(parentID, '')=''
Union all
Select f.GUID,f.MFG_CODE,f.STK_NAME,f.parentid,f.masteritem
from fstock f
inner join products g
on f.parentid=g.guid
)