2017-10-06 35 views
0

我在2010年訪問工作我有一個具有以下格式的表下的艾策斯加入行:具體條件

ID BOORP BEGIN_DIEPTE EIND_DIEPTE TEXTUUR1 1 148000 0 10 ZK 2 148000 20 60 ZK 3 148000 60 80 MK 4 148000 80 110 MK 5 148000 110 130 ZK 6 148000 130 160 - 7 148000 160 220 ZZL 8 148000 220 250 - 9 148000 250 300 MK 10 148001 0 20 ZK 11 148001 20 40 - 12 148001 40 210 ZZL 13 148001 210 310 ZZL

我要的是加入具有下相同的紋理某些行以下條件:

1)行必須具有相同BOORP以被合併

2)僅連續行可被合併

結果應該是這樣的:

ID BOORP BEGIN_DIEPTE EIND_DIEPTE TEXTUUR1 1 148000 0 60 ZK 3 148000 60 110 MK 5 148000 110 130 ZK 6 148000 130 160 - 7 148000 160 220 ZZL 8 148000 220 250 - 9 148000 250 300 MK 10 148001 0 20 MK 11 148001 20 40 - 12 148001 40 310 ZZL
它尤其我在遇到問題的第二個條件。 有什麼建議嗎?

回答

0

這是一個相當複雜的任務,因爲它是一個純SQL解決方案。 如果你想要做一個查詢,您可以採用如下方案(在你的樣本數據進行測試):

SELECT e.ID, e.BOORP, e.BEGIN_DIEPTE, e.EINDDIEPTE As EIND_DIEPTE, e.TEXTUUR1 
FROM 
(
    SELECT a.ID, a.BOORP, a.BEGIN_DIEPTE, IIF(b.ID Is Null, a.EIND_DIEPTE, b.EIND_DIEPTE) AS EINDDIEPTE, a.TEXTUUR1, b.ID As IDJoined 
    FROM TestTable a 
    LEFT JOIN 
     (
      SELECT c.*, (SELECT Max(d.ID) FROM TestTable d WHERE d.ID < c.ID) As PreviousID 
      FROM TestTable c 
     ) As b 
    ON b.PreviousID = a.ID AND b.BOORP = a.BOORP AND a.TEXTUUR1 = b.TEXTUUR1 
) AS e 
WHERE e.ID NOT IN (
    SELECT b.ID 
    FROM TestTable a 
    INNER JOIN 
     (
      SELECT c.*, (SELECT Max(d.ID) FROM TestTable d WHERE d.ID < c.ID) As PreviousID 
      FROM TestTable c 
     ) As b 
    ON b.PreviousID = a.ID AND b.BOORP = a.BOORP AND a.TEXTUUR1 = b.TEXTUUR1 
) 

這是相當多的子查詢,並有點過分深入講解。簡而言之,最內層的子查詢(查詢bLEFT JOIN s等於BOORPTEXTUUR1,並且其中ID是先前的ID,那麼外層子查詢(查詢e)接受結果,並刪除所有與另一個條目。

請注意,這將兩個條目連接在一起,但不會超過這個條目。如果你想一起加入2個以上的條目,你可以對這個結果運行一個類似的查詢。