第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

CTE遞歸以獲取樹層次結(jié)構(gòu)

CTE遞歸以獲取樹層次結(jié)構(gòu)

米琪卡哇伊 2019-10-19 15:26:41
我需要以特定方式獲取樹的有序?qū)哟谓Y(jié)構(gòu)。有問題的表格看起來像這樣(所有ID字段都是uniqueidentifier,為了示例,我簡化了數(shù)據(jù)):EstimateItemID EstimateIDParentEstimateItemID ItemType-------------- ---------- -------------------- ------ -       1個NULL乘積       2 A 1產(chǎn)品       3 A 2服務       4 NULL產(chǎn)品       5 A 4產(chǎn)品       6 A 5服務       7 A 1服務       8 A 4產(chǎn)品樹形結(jié)構(gòu)的圖形視圖(*表示“服務”):           一種       ___ / \ ___      / \    1 4   ///  2 7 * 5 8 ///3 * 6 *使用此查詢,我可以得到層次結(jié)構(gòu)(假裝'A'是唯一標識符,我知道它不是現(xiàn)實生活中的):DECLARE @EstimateID uniqueidentifierSELECT @EstimateID = 'A';WITH temp as(    SELECT * FROM EstimateItem    WHERE EstimateID = @EstimateID    UNION ALL    SELECT ei.* FROM EstimateItem ei    INNER JOIN temp x ON ei.ParentEstimateItemID = x.EstimateItemID)SELECT * FROM temp這為我提供了EstimateID'A'的子級,但是按照它在表格中出現(xiàn)的順序。即:EstimateItemID--------------      1個      2      3      4      5      6      7      8不幸的是,我需要的是一個有序集合,其結(jié)果集遵循以下約束:1.每個分支必須分組2. ItemType為“ product”且父級為最高的記錄 3.具有ItemType'product'和非NULL父級的記錄分組在頂部節(jié)點之后 4. ItemType為“ service”的記錄是分支的底部節(jié)點因此,在此示例中,我需要結(jié)果的順序為:EstimateItemID--------------      1個      2      3      7      4      5      8      6要完成此操作,我需要添加什么?
查看完整描述

3 回答

?
POPMUISE

TA貢獻1765條經(jīng)驗 獲得超5個贊

嘗試這個:


;WITH items AS (

    SELECT EstimateItemID, ItemType

    , 0 AS Level

    , CAST(EstimateItemID AS VARCHAR(255)) AS Path

    FROM EstimateItem 

    WHERE ParentEstimateItemID IS NULL AND EstimateID = @EstimateID


    UNION ALL


    SELECT i.EstimateItemID, i.ItemType

    , Level + 1

    , CAST(Path + '.' + CAST(i.EstimateItemID AS VARCHAR(255)) AS VARCHAR(255))

    FROM EstimateItem i

    INNER JOIN items itms ON itms.EstimateItemID = i.ParentEstimateItemID

)


SELECT * FROM items ORDER BY Path

帶Path-行由父節(jié)點排序


如果要按ItemType每個級別對子節(jié)點進行排序,則可以使用Leveland SUBSTRINGof Pathcolumn ....


這里是SQLFiddle與數(shù)據(jù)樣本


查看完整回答
反對 回復 2019-10-19
?
慕工程0101907

TA貢獻1887條經(jīng)驗 獲得超5個贊

我相信您需要在CTE的結(jié)果中添加以下內(nèi)容...


BranchID =唯一標識分支的某種標識符。原諒我沒有具體說明,但我不確定是什么確定了您需要的分支。您的示例顯示了一個二叉樹,其中所有分支都流回到根。

ItemTypeID,其中(例如)0 =產(chǎn)品和1 =服務。

父母=標識父母。

如果輸出中存在這些內(nèi)容,我認為您應該能夠?qū)⒉樵兊妮敵鲇米髁硪粋€CTE或查詢中的FROM子句。按BranchID,ItemTypeID,Parent排序。


查看完整回答
反對 回復 2019-10-19
  • 3 回答
  • 0 關(guān)注
  • 625 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號