我的大腦今天可能無法作業......但我正在嘗試以特定方式排列資料集。更容易表明我的意思。
我有一個這樣的資料集:
CREATE TABLE #EXAMPLE (
ID CHAR(11)
, ORDER_ID INT
, PARENT_ORDER_ID INT
);
INSERT INTO #EXAMPLE VALUES
('27KJKR8K3TP', 19517, 0)
, ('27KJKR8K3TP', 10615, 0)
, ('27KJKR8K3TP', 83364, 19517)
, ('27KJKR8K3TP', 96671, 10615)
, ('TXCMK9757JT', 92645, 0)
, ('TXCMK9757JT', 60924, 92645);
SELECT * FROM #EXAMPLE;
DROP TABLE #EXAMPLE;
PARENT_ORDER_ID 欄位參考給定 ID 上的其他訂單。例如,ID TXCMK9757JT 有訂單 60924,它是 92645 的子訂單,它是 ID 上的單獨訂單。我需要安排這個資料集的方式是這樣的:
CREATE TABLE #EXAMPLE (
ID CHAR(11)
, ORDER_ID INT
, CHILD_ORDER_ID INT
);
INSERT INTO #EXAMPLE VALUES
('27KJKR8K3TP', 19517, 19517)
, ('27KJKR8K3TP', 19517, 83364)
, ('27KJKR8K3TP', 10615, 10615)
, ('27KJKR8K3TP', 10615, 96671)
--, ('27KJKR8K3TP', 83364, 83364)
--, ('27KJKR8K3TP', 96671, 96671)
, ('TXCMK9757JT', 92645, 92645)
, ('TXCMK9757JT', 92645, 60924)
--, ('TXCMK9757JT', 60924, 60924)
;
SELECT * FROM #EXAMPLE;
DROP TABLE #EXAMPLE;
在資料集的這種排列中,不是 PARENT_ORDER_ID 欄位,而是 CHILD_ORDER_ID,它基本上列出了屬于給定 ORDER_ID 的每個單個 ORDER_ID,包括它自己。我最終希望 CHILD_ORDER_ID 欄位成為資料集的鍵,只有唯一值(這就是為什么我注釋掉了只包含它們自己的 CHILD_ORDER_ID,因為它們有一個已經包含它們的父訂單 ID) .
任何有關如何實作所描述的資料集轉換的建議將不勝感激!我已經嘗試過遞回 CTE 和不同的連接陳述句,但我并沒有完全得到我想要的。謝謝!
uj5u.com熱心網友回復:
您可以先嘗試使用 CTE 遞回,然后您將得到一個顯示所有Id層次結構的結果,然后使用CASE WHEN判斷邏輯。
;WITH CTE AS (
SELECT ID,ORDER_ID,PARENT_ORDER_ID
FROM #EXAMPLE
WHERE PARENT_ORDER_ID = 0
UNION ALL
SELECT c.Id,e.ORDER_ID,e.PARENT_ORDER_ID
FROM CTE c
INNER JOIN #EXAMPLE e
ON c.ORDER_ID = e.PARENT_ORDER_ID AND c.Id = e.Id
)
SELECT ID,
(CASE WHEN PARENT_ORDER_ID = 0 THEN ORDER_ID ELSE PARENT_ORDER_ID END) ORDER_ID,
ORDER_ID CHILD_ORDER_ID
FROM CTE
ORDER BY ID
sqlfiddle
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/425355.html
下一篇:如何在存盤程序中插入多個開始結束
