2013-08-20 60 views
2

我在SQL 2012兩個表:名稱和生產線具有結構:SQL,有關問題加入

id int increment, name1 nvarchar(50)

督促id int increment, products nvarchar(50), id_name int

值表:

名稱表:

Id name1 
1 pop 
2 andi 

督促表:

Id products id_name 
1 coke  1 
2 pizza  1 
3 orange  2 

我做了這個查詢:

select name.name1, prod.product, prod.id_name 
from name 
join prod on name.id=prod.id_name 

我怎樣才能獲得這樣的結果:

pop ->coke, pizza 
andi->orange 
+0

你有問題嗎? – gvee

+0

你想要什麼? –

回答

5

不幸的是,有沒有簡單的方法來做到這一點在SQL Server中。已知的解決方案是:

  • xml技巧(見下文);
  • 使用變量來累積數據(不適用於多個組行,僅適用於光標);
  • 定製CLR聚合;

這裏的XML:

select 
    n.name1, 
    stuff(
     (
     select ', ' + p.product 
     from prod as p 
     where p.id_name = n.id 
     for xml path(''), type).value('.', 'nvarchar(max)') 
    , 1, 2, '') as products 
from name as n 

sql fiddle demo

這裏的變量:

declare @product nvarchar(max), @id int 

select @id = 1 

select @product = isnull(@product + ', ', '') + product 
from prod 
where id_name = @id 

select name1, @product as products 
from name 
where id = @id 

sql fiddle demo

+0

它的工作,但我需要使用加入一些這樣的:「選擇n.name1,東西((選擇','+ p.product從產品p 加入prod p.id_name = n.id 爲xml路徑''),type).value('。','nvarchar(max)'),1,2,'') from name as n「但是如果我使用join,結果將會是:pop-> coke,coke ,可樂,披薩,披薩,披薩;和 - >橙色,橙色,橙色;並不好。如果我使用Join,你能幫助我嗎? – user2645263

+0

你需要什麼加入? –

+0

我需要那個連接,因爲我有一個有更多表的數據庫,我使用連接3個表,並且我有一些條件。這只是一個例子。我通過以下模式加入解決了問題:「select distinct n.name1,stuff((select','+ p.product from prod as p where p.id_name = n.id for xml path(''),型)。價值(」。','nvarchar(max)'),1,2,'') from name as n join prod on prod.id_name = n.id「THANKS !!!! – user2645263

3

試試這個:

SELECT 
G.id, 
G.name1, 
stuff(
    (select cast(',' as varchar(10)) + U.product 
    from prod U 
    WHERE U.id_name = G.id 
    order by U.product 
    for xml path('') 
), 1, 1, '') AS prod 
FROM name G 
ORDER BY G.name1 ASC 
3

sqlfiddle

select 
n.nameid [id], 
n.name [name], 
count(*)[count], 
    stuff(
     (
     select ', ' + p.prod 
     from prodtbl as p 
     where p.nameid = n.nameid 
     for xml path(''), type).value('.', 'nvarchar(max)'), 1, 1, '') as products 
from nametbl n, prodtbl p 
where p.nameid = n.nameid 
group by n.nameid, n.name 
order by [id]; 

enter image description here

+1

看不到我的回答有什麼不同:) –

+0

+1小小的變化,只是想給'count'信息 - 如果這對user2645263有幫助。:) – MrSimpleMind