2017-01-27 102 views
0

我的表「詳細信息」看起來像這樣,SQL查詢返回其在同一行的另一列相同ID的列的不同值

ID Name City 
1  Arun Chennai 
2  Arun Mumbai 
3  Raj  Bangalore 
4  Raj  Chennai 

我要選擇在「城市包含不同的值相同的名稱'列在一行中。

我已經寫了下面的查詢

select a.id, b.id, a.Name, a.city, b.city 
from Details a join Details b on a.Name = b.Name 
where a.City <> b.City 

對於其輸出是

id id Name City  City 
1 2 Arun Chennai Mumbai 
2 1 Arun Mumbai Chennai 
3 4 Raj Bangalore Chennai 
4 3 Raj Chennai Bangalore 

但我需要在一排的輸出與這兩個ID和市

id id Name City  City 
1 2 Arun Chennai Mumbai 
3 4 Raj Bangalore Chennai 

請建議

+1

您使用哪種RDBMS?只標記一個! –

回答

0

試試這個:

select a.id, b.id, a.Name, a.city, b.city 
from Details a 
inner join Details b on a.Name = b.Name and a.id < b.id 

注:這隻要你總是有兩個記錄每Name工作。如果你有任何一個,或者兩個記錄,那麼你可以使用LEFT JOIN而不是INNER JOIN

編輯:如果你可以爲每個Name一個,兩個或三個記錄,然後將查詢可以歸結爲如下:

select a.id, b.id, a.Name, a.city, b.city 
from Details a 
left join Details b on a.Name = b.Name and a.id < b.id 
left join Details c on a.Name = c.Name and b.id < c.id 

注:如果記錄的數量是動態變化的,然後你必須使用某種與字符串連接,在MySQL中使用的GROUP_CONCAT等效分組。

+0

@Lakshman請檢查我所做的編輯。 –

+0

謝謝@Giorgos – Lakshman

0

我不知道爲什麼你需要的ID &城市多列在同一組。

但是,這可能會幫助你(假定RDBMS:SQL Server)的

SELECT NAME, STUFF((
      SELECT ',' + City 
      FROM #DETAILS D2 
      WHERE D1.NAME = D2.NAME 
      FOR XML PATH('') 
      ), 1, 1, '') as Cities 
FROM #DETAILS D1 
GROUP BY NAME 

這會給你的結果一樣

+------+-------------------+ 
| Name |  Cities  | 
+------+-------------------+ 
| Arun | Chennai,Mumbai | 
| Raj | Bangalore,Chennai | 
+------+-------------------+ 
0

您可以取代你的表名。這裏我使用了內連接。

SELECT T1.ID,T2.ID,T1.Name,T1.City,T2.City 
FROM your_table T1 
INNER JOIN your_table T2 
ON T1.ID < t2.ID 
WHERE T1.Name = T2.Name 
相關問題