0

我运行以下查询

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()函数返回固定数量的行,但是那些返回的行有时包含 a 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
4

1 回答 1

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
)
于 2012-10-03T20:01:24.723 回答