2016-02-22 51 views
-1

我有一個表,名爲CARS(id,brand,owner)。讓我們假設所有者這裏是外鍵,我的表中的數據是:在選擇查詢中合併具有相同外鍵標識值的列

1 mercedes Jack 
2 mercedes John 
3 bmw  Jack 
4 bmw  John 
6 audi  Jack 

我希望看到這樣的輸出:

1 mercedes, bmw, audi Jack 
2 mercedes, bmw   John 

如何管理呢?我在下面寫了這個查詢,但它不正確。任何幫助,將不勝感激。

select CARS.id, CARS.brand, CARS.owner 
from CARS 
inner join (Select c1.id, (c1.brand + ',' + c2.brand) from CARS c inner join CARS c2 
      on (c1.owner = c2.owner) where c1.brand <> c2.brand) as tempCars 
on (CARS.id = tempCars.id) 

我不可能正確管理合並過程..

編輯:我的職位看起來類似於標籤Alleman提到的職位。我在問這個問題之前看到了它,但答案對我來說並不那麼清楚,所以我仍然無法弄清楚如何修改我的查詢來滿足我的目標。任何額外的幫助,將不勝感激。

+0

我看到這張貼我的問題之前,但仍不可能管理解決煤礦.. :( –

+0

你已經嘗試過沒有按代碼看起來不像重複問題中接受的答案,請再次閱讀並重試,關鍵部分是'CROSS JOIN'和使用'FOR XML'。 –

回答

0

試試這樣說:

DECLARE @tbl TABLE(id INT, brand VARCHAR(100),owner VARCHAR(100)); 
INSERT INTO @tbl VALUES 
(1,'mercedes','Jack') 
,(2,'mercedes','John') 
,(3,'bmw','Jack') 
,(4,'bmw','John') 
,(6,'audi','Jack'); 

WITH DistinctOwners AS 
(
    SELECT DISTINCT owner 
    FROM @tbl 
) 
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS inx 
     ,STUFF((
     SELECT ',' + innerTbl.brand 
     FROM @tbl AS innerTbl 
     WHERE innerTbl.owner=do.owner 
     FOR XML PATH('') 
     ),1,1,'') AS brands 
     ,do.owner 
FROM DistinctOwners AS do  

結果

1 mercedes,bmw,audi Jack 
2 mercedes,bmw  John 
+0

非常感謝,它正在工作。有一些空閒時間可以請你解釋我的FOR XML路徑的邏輯,h它正在工作嗎?祝你今天愉快。 –

+0

@Eray,'FOR XML'是以XML形式獲取輸出的語法。你用'PATH'聲明,你自己負責處理XML元素和屬性的名字。然後你將它們全部留空......所以可憐的SQL Server創建一個沒有任何元素名稱的XML - 這幾乎是我們想要的結果。 'STUFF()'函數帶走第一個逗號。 – Shnugo

+0

嗨,你好!請解釋一下爲什麼......沒有評論的評論是相當 - 呃 - 弱... – Shnugo

相關問題