我有一個包含2列OLD_VALUE和NEW_VALUE以及5行的表格。第一行有值(A,B)。其他行值可以是(B,C),(C,D),(E,D),(D,F)。我想用新值更新所有舊值(如何在Excel中進行查找)最終結果要求:以上示例中的最新值爲D,F。即D指向F.E和C指向D.B指向C並且A指向B.指向F的指針D是最後和最新的,並且在D,F之後不再有連續。所以(OLD_VALUE,NEW_VALUE)→(A,F),(B,F),(C,F),(D,F),(E,F)。我需要5行NEW_VALUE爲'F'。繼承的級別可以從1到x。在Excel中Vlookup函數的SQL邏輯/如何在SQL中執行Vlookup
回答
我認爲像下面這樣的遞歸CTE就是你要找的東西(父母是第二個值不是第一個值的行)。如果沒有父母需要定位,這可能會失敗(例如,如果您有A-> B,B-> C,C-> A,您將得不到結果),但它應該適用於您的情況:
DECLARE @T TABLE (val1 CHAR(1), val2 CHAR(2));
INSERT @T VALUES ('A', 'B'), ('B', 'C'), ('C', 'D'), ('E', 'D'), ('D', 'F');
WITH CTE AS
(
SELECT val1, val2
FROM @T AS T
WHERE NOT EXISTS (SELECT 1 FROM @T WHERE val1 = T.val2)
UNION ALL
SELECT T.val1, CTE.val2
FROM @T AS T
JOIN CTE
ON CTE.val1 = T.val2
)
SELECT *
FROM CTE;
太棒了。這工作!非常感謝你的幫助! :) –
這是我使用的腳本的表:
declare @t as table(old_value char(1), new_value char(1));
insert into @t values('A','B')
insert into @t values('B','C')
insert into @t values('C','D')
insert into @t values('E','D')
insert into @t values('D','F')
這需要用遞歸CTE完成。首先,您需要爲CTE定義一個錨點。這種情況下的錨點應該是具有最新值的記錄。這是我如何定義錨:
select old_value, new_value, 1 as level
from @t
where new_value NOT IN (select old_value from @t)
這裏是遞歸的CTE我用來定位每一行的最新值:
;with a as(
select old_value, new_value, 1 as level
from @t
where new_value NOT IN (select old_value from @t)
union all
select b.old_value, a.new_value, a.level + 1
from a INNER JOIN @t b ON a.old_value = b.new_value
)
select * from a
結果:
old_value new_value level
--------- --------- -----------
D F 1
C F 2
E F 2
B F 3
A F 4
(5 row(s) affected)
非常感謝!欣賞它! :) –
我從中學到了一些東西,我一直認爲它必須從A到F,但是你在另一個方向上構建它。我必須記住這一點。 –
- 1. 如何在同一個表中的SQL中運行vlookup函數?
- 2. VBA Excel中的VLOOKUP VLOOKUP
- 3. Excel中VLOOKUP W/SUM函數
- 4. 在Excel中創建與VLOOKUP函數
- 5. 在Excel中的Vlookup幫助
- 6. Excel VBA中VLOOKUP
- 7. Excel中VLOOKUP VBA
- 8. VLOOKUP在Excel宏
- 9. VLOOKUP在Excel
- 10. VLOOKUP FOR SQL
- 11. Excel VLOOKUP函數源代碼
- 12. Excel 2007 VBA VLookup函數
- 13. Excel中的VLookup宏
- 14. Python中的Excel Vlookup
- 15. 在Julia的Excel vlookup
- 16. 在VBA excel中修改VLOOKUP
- 17. Vlookup在Excel中左鍵
- 18. 在Excel中插入VLookup match
- 19. 如何在Excel中做這個vlookup?
- 20. 使用VLOOKUP函數在MS Excel
- 21. VLOOKUP公式數組在Excel
- 22. 4列VLOOKUP在Excel
- 23. VLOOKUP在Excel 2片
- 24. VLOOKUP在Excel問題
- 25. 在VBA中執行多個vlookup操作
- 26. 在excel中的幾列中的VLOOKUP
- 27. Excel中 - 使用從VLOOKUP結果在另一個VLOOKUP
- 28. 如何修改Excel中的VLOOKUP公式
- 29. excel 2013中的嵌套vlookup
- 30. Excel中的VLOOKUP幫助?
你怎麼了知道哪一行是'第一',這是'最後'?你有一個表示訂單的專欄嗎? – cha
不,不幸的是,沒有表示訂單的列。 –
所以如果你在Excel中這樣做,你會使用5個vlookups?問題不是很清楚...... –