2017-07-18 27 views
1

我遇到了一個非常有趣的問題,當處理行應該是相似的,但彼此之間由一個或多個缺失的值不同。我想要做的是執行一個查詢,將所有相似的行摺疊(分組)爲包含所有(或儘可能多)列的值的條目,以便刪除缺失的值。拼圖相似的行有不同的偶爾缺失值

我將分裂這個問題成以下兩個子問題:

問題A)

鑑於表:

|--------------------------| 
| col1 | col2 | col3 | 
|--------------------------| 
| a |  | c | 
| a | b |  | 
|  |  | c | 
| a | b |  | 
|  | b | c | 
| a |  | c | 
|--------------------------| 

創建查詢返回 - >(A,B, c)

問題B)

Giv恩表:

|--------------------------| 
| col1 | col2 | col3 | 
|--------------------------| 
| a |  | c | 
| a | b |  | 
|  |  | c | 
| a | b |  | 
|  | b | c | 
| a |  | c | 
| d |  | f | 
| d |  |  | 
|  | e | f | 
| d | e |  | 
| d |  | f | 
|--------------------------| 

創建一個查詢返回 - >(A,B,C),(d,E,F)

如何任何這是可以實現的任何想法或提示?

+1

A 3元組,如'(A,B,C)'存在只要'A'涉及'B','B'涉及'C' **和* *'a'與'c'有關。它是否正確? –

+1

爲什麼不是{d,e,c}? – JeffUK

+0

@JeffUK'e'與'c'無關,'d'與'c'都不相關。 –

回答

0

您可以嘗試在col1列上分組,然後選擇其他兩列中的MAX()。如果仔細觀察第一個表格,您會看到col2col3的唯一值分別爲bc。同樣的推理適用於您的第二個表格,但該表格有col1兩個不同的值。

SELECT 
    col1, MAX(col2) AS col2, MAX(col3) AS col3 
FROM yourTable 
WHERE col1 IS NOT NULL 
GROUP BY col1 

演示在這裏:

Rextester

+0

謝謝!有沒有一種方法可以在每一列上重複迭代,然後從每個查詢結果中提取唯一的出現? –

+0

@AlexChi我不明白你的問題。除了這個查詢,你還需要什麼?更新你的問題。 –

+0

我需要爲每列重複此查詢。首先,我將按col1分組,然後按col2分組,然後按col3分組等。當然,這些查詢的輸出會有很大的重疊,所以我需要放棄重複的發生。執行此操作的最佳方式是什麼? –

0

如果一個3元組,只要col1有關col2存在,col1有關col3col2有關col3,那麼你可以嘗試下面的查詢:

SELECT DISTINCT t1.col1, t2.col2, t3.col3 
FROM mytable AS t1 
-- col1 is realted to col2 
LEFT JOIN mytable AS t2 ON t1.col1 = t2.col1 AND t2.col2 IS NOT NULL 
-- col1 is related to col3 
LEFT JOIN mytable AS t3 ON t1.col1 = t3.col1 AND t3.col3 IS NOT NULL 
WHERE t1.col1 IS NOT NULL 
     -- col2 is related to col3 
     AND EXISTS (SELECT 1 
        FROM mytable AS t4 
        WHERE t4.col2 = t2.col2 AND t4.col3 = t3.col3); 

Demo here

+0

謝謝!試圖將此示例擴展到我的生產數據:) –