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()これら2つのクエリを組み合わせる方法はありますか?関数を使用して固定量の行のみを返したいのですが、返された行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 に答える