2012-02-01 286 views
0

我想知道如果下面是可能的下。說我有如下表:SQL查詢 - 顯示在同一列兩次不同的條件

ID | NAME
  1 | John
  2 | Bob
  3 | John
  4 |鮑勃


是否有可能運行一個查詢,結果如下:

名稱| ID1 | ID2
約翰      | 1       | 3
鮑勃        | 2       | 4

EDIT

很抱歉的混亂。我的問題解決了我需要處理2個大型數據集重複的可能性的情況。

+0

你是說,查詢只需要處理2重複的可能性,或者只是你的例子有2? – JohnFx 2012-02-01 18:57:01

+0

它只需要處理2個重複的可能性。 – 2012-02-01 18:58:57

回答

9

正好2個假設複製

SELECT 
    NAME, 
    MIN(ID) as ID1, 
    MAX(ID) as ID2 
FROM Table t 
GROUP BY NAME 
1

這應該工作。請注意,子查詢會篩選出所有不完全具有兩個id的名稱。

select name,min(id) as id1,max(id) as id2 
from table 
join(
    select name 
    from table 
    group by name 
    having count(1)=2 
)names 
using(name) 
group by name; 
+2

不確定你需要在這裏加入。我也接近-1自然連接 – JNK 2012-02-01 18:56:41

+0

嗯,你可以進行連接,或者添加一個'where where name(在表名中選擇count(1)= 2)'。老實說,查詢優化器通常會將其抽象出來。 – 2012-02-01 18:59:14

+0

我不確定他甚至需要過濾,因爲他只需要兩個具有相同值的ID,但沒有它 – JNK 2012-02-01 19:00:24

1

如果恰好有兩排,每個名稱,然後下面應該工作:

SELECT a.name, 
     a.id as id1, 
     b.id as id2 
FROM the_table a 
    JOIN the_table b ON a.name = b.name AND a.id <> b.id 
+0

這會給出重複的行,因爲您不檢查id值是否相同 – JNK 2012-02-01 18:57:45

+0

這會回報方式結果太多。 – 2012-02-01 18:59:01

+2

@JNK:對,我忘了。感謝您指出 – 2012-02-01 19:00:25

相關問題