2014-05-19 76 views
0

我有一張表(請參見下面的圖像 - 紅框)。它描述了我的表格(A,B,C和D)的內容是列。數據結構將始終如此,如果col A是Type_1,只有col B有一個內容,而如果Col A是Type_2,Col C和D有內容而col B是NULL。SQL Query將兩行組合成一行數據

現在,用綠框包圍的表格就是我想要的輸出。

enter image description here

我上建立一個select語句的經驗還不是很豐富的,我幾乎對創建兩個單獨的表扶着讓我期望的結果(如表1只TYPE_1數據,另一個表TYPE_2數據只要)。

問題是,是否有可能查詢兩行並將其組合成使用SELECT查詢的單個輸出結果?考慮到這兩行在同一張桌子上?

謝謝。

+3

如果有多個TYPE_1和多個Type_2行,它如何知道要合併哪些行? –

+0

@JoachimIsaksson,'數據結構將永遠是這樣的' –

+0

我很抱歉,我在第一個評論後意識到我的圖片不是很清楚。請參閱更新的主題。 – ChiSen

回答

3

事情是這樣的:

SELECT 
    Table2Id, 
    MAX(B) B, 
    MAX(C) C, 
    MAX(D) D 
FROM tbl 
WHERE A != 'Type_3' 
GROUP BY Table2Id 
+0

這個查詢就像一個魅力!謝謝! – ChiSen

0

您可以用括號括起來做子查詢。如:

SELECT (SELECT TOP 1 B FROM table ORDER BY some_ordering), (SELECT TOP 1 C FROM table WHERE NOT C IS NULL), D FROM table 

括號內的查詢可以適用於任何表,可從主查詢中選擇值的計算,並在過濾器中使用的數據。

1

假設只存在一個用於類型1的數據的行和2型中的一行數據,則可以使用下面的:

SELECT Id, MAX(B) AS B, MAX(C) AS C, MAX(D) AS D 
    FROM Table2 
    WHERE A IN ('Type_1','Type_2') 
    GROUP BY Id 

實施例在此SQL Fiddle