2013-08-30 67 views
0

我想從表中選擇並使用CASE語句JOIN三行。我更習慣於C++,它將是一個IF語句,在這裏是壞的僞代碼(這適用於任何待加入的行,即,如果任何待加入的行具有.. 。)SQL:根據多行中的值加入多行

IF (value1 == 1) // IF any of the rows have value1 == 1 
{ 
    value1 = 1; 
    value2 = 0; 
} 
ELSE IF (value1 == 0 && value2 == 1) // IF all of the rows have value1 == 0 and any have value2 == 1 
{ 
    value1 = 0; 
    value2 = 1; 
} 

因此,例如,如果三排像下面(的ID必須是相同的,不要問我爲什麼...)

ID value1 value2 
-------------------- 
1  1  0 
1  0  0 
1  0  1 

我希望得到的加入排要

1  1  0 

但是,如果三個原始行看起來像

ID value1 value2 
-------------------- 
1  0  0 
1  0  0 
1  0  1 

那麼我想加盟產生的排鬚

1  0  1 

我對僞劣表格格式對不起,我不習慣標記。任何幫助或指針在正確的方向將不勝感激。速度不應該是一個問題,因爲每個查詢不得超過三行。

+0

關於你的*僞劣格式*:只是簡單地用4位縮進線(或突出的線條和按在工具欄上的「代碼樣本」按鈕{{}')以正確格式化 –

+0

如果您在value1和value2中使用其他數字,它可以更好地說明您的目標。當一切都是一個或一個零時,就不容易辨別你想要達到的目標。 – WarrenT

+0

我認爲1和0會是最清楚的,我應該使用什麼,也許一些複雜的數字? – sage6

回答

0

根本不是JOIN,似乎您需要根據邏輯彙總結果。這將是很好的瞭解你使用的RDBMS,但這應該在多數人身上的工作:

SELECT ID, 
     Value1, 
     CASE WHEN Value1 = 1 THEN 0 ELSE Value2 END Value2 
FROM ( SELECT ID, 
       MAX(CASE WHEN Value1 = 1 THEN 1 ELSE 0 END) Value1, 
       MAX(Value2) Value2 
     FROM YourTable 
     GROUP BY ID) A 
+0

感謝百萬人,這就像一個魅力:)(我也會記住格式) – sage6