2011-07-14 5 views
5

私は以下のような製品テーブルを持っています。セミコロンで区切られた製品名を与えるSQLを作成したいと思います。製品名をセミコロンで区切ったsqlを作成しますか?

ProductName AccountExpert 
-------------------------- 
Tea   JohnSmith 
Banana  GarySulvan 
Water  JohnSmith 
Candy  BobbySimmons 
ConfecItem BobbySimmons 
Bread  JohnSmith 
Soda   JohnSmith 

MySQLを使っている場合は、SQL出力は、グループ化し、GROUP_CONCATを使用し、この

AccountExpert Products 
----------------------- 
JohnSmith  Tea; Water; Bread; Soda 
GarySulvan  Banana 
BobbySimmons Candy; ConfecItem 
+1

どのようなSQLエンジンを使用していますか? (これは重要です。なぜなら連結集約は実際には非常に難しく、回答はエンジンとバージョンによって異なるかもしれません)。 –

+0

ここで質問を投稿する前に、もう少し研究を重ねていく必要があります。これは質疑応答のウェブサイトではなく、あなたが何らかの努力を払ってどこかについていれば、人々があなたを助ける場所です! –

+2

@タルンは何か努力を示しているのは素晴らしいジェスチャーですが、それは... * Q&Aウェブサイトではありませんか?もちろん! –

答えて

1

でこれを行うには本当にエレガントな方法が存在しないということですFOR XMLを使用して、余分な区切り文字を削除します。残念ながら、MySQLのようにグループの連結機能はありません。

CREATE TABLE #ProductExpert (ProductName nvarchar(20), AccountExpert nvarchar(20)) 

INSERT INTO #ProductExpert(ProductName, AccountExpert) SELECT 
'Tea',   'JohnSmith'  UNION ALL SELECT 
'Banana',  'GarySulvan' UNION ALL SELECT 
'Water',  'JohnSmith'  UNION ALL SELECT 
'Candy',  'BobbySimmons' UNION ALL SELECT 
'ConfecItem', 'BobbySimmons' UNION ALL SELECT 
'Bread',  'JohnSmith'  UNION ALL SELECT 
'Soda',   'JohnSmith' 

SELECT DISTINCT 
    ae.AccountExpert, 
    Stuff((
     SELECT 
      '; ' + p.ProductName 
     FROM 
      #ProductExpert AS p 
     WHERE 
      ae.AccountExpert = p.AccountExpert 
     ORDER BY 
      p.ProductName 
     FOR XML PATH('') 
    ), 1, 2, '') AS Products 
FROM 
    #ProductExpert AS ae 
ORDER BY 
    ae.AccountExpert 

DROP TABLE #ProductExpert 
+0

SQL用にありがとうございました。それは最初の試みで働いた。 –

1

が好きでなければならない:

SELECT AccountExpert, GROUP_CONCAT(ProductName SEPARATOR '; ') 
FROM ProductExperts 
GROUP BY AccountExpert 
+0

ああ、ちょうどあなたがsql-server-2008として質問をタグ付けしたことに気付きました。すばやいグーグルがこの投稿を返しました:http://blog.shlomoid.com/ 2008/11/emulating-mysqls-groupconcat-function.html助けてくれることを願っています – keymone

関連する問題