2011-10-03 29 views
0
1列

我試圖用2008年MSSQL,使一個新的觀點: 表1有客戶ID和事務ID 表1SQL視圖 - 從三個表將多個行到

CustomerID  TransactionID 
1      1 
1      2 

表2有采購交易和產品ID

TransactionID ProductID 
1      x 
2      y 

表3有產品名稱

ProductID Name 
1   x 
2   y 

我認爲我想提出應該顯示

CustomerID Product Name 
1    x, y 

當我使用下面的查詢:

SELECT  table1. CustomerID, table3.Name 

FROM   table1 LEFT OUTER JOIN 
         Table2 ON table2. TransactionID = table1.VisitId LEFT OUTER JOIN 
         Table3 ON table2. ProductID = Table3. ProductID 

         GROUP BY table1. CustomerID, table3.Name 

我得到提前

CustomerID Product Name 
1   x 
1   y 

感謝

+1

[T-SQL的可能重複。如何在一個SELECT中創建列表爲逗號分隔的字符串?](http://stackoverflow.com/questions/7621432/t-sql-how-create-list-as-comma-separated-string-in-one-select)從昨天 – gbn

+1

可能重複[sql連接角色](http://stackoverflow.com/questions/6624347/sql-concatenated-roles) –

回答

0

的一種方式要做到這一點是使用用戶定義的功能,如:

SELECT table1.CustomerID, dbo.BuildStringOfCustomerProductNames(table1.CustomerID) 
FROM table1 

而創建像一個用戶定義的函數:dbo.BuildStringOfCustomerProductNames 採用一個CustomerID作爲輸入。 在那裏,你可以運行一個查詢來循環遍歷表2和表3連接的記錄來創建一個字符串,並返回它。

副手我想不出任何其他簡單的方法來做到這一點。

+0

感謝Mafu,如果你能解釋更詳細的定義函數,我將不勝感激。 – hncl

+0

那麼,我認爲提供給你的問題的鏈接可能是一個更好的答案。但是通過一個函數來做到這一點:我現在沒有時間真正拼出它,但基本上你會創建一個以客戶ID爲輸入的函數。創建一個varchar變量,並創建一個遊標來循環返回客戶產品名稱的查詢。在每個循環中,將逗號和產品名稱附加到變量中,並在變量後面返回變量。這只是一個答案。不一定很好。 –