2012-03-09 17 views
1

tblEmployeetblWorkPlaceという2つのテーブルがあります。 2番目の表は、各従業員の複数の行で構成されています。私は次のように結果を得たいと思う。SQL Serverでコンマ区切りの値を取得する方法は?

EmployeeName WorkPlace 
Gopi   India,Pakistan,... 

Ie. tblWorkPlaceが従業員の複数の行で構成されている場合は、データをカンマで区切って1行に入力します。

どうすればこの結果が得られますか?

+0

どのバージョンのSQL Serverをお使いですか? –

答えて

2

これを行うには、クライアント側にコードが必要です。これはSQLサーバーでこれを行うことは可能ですが、それは自明ではない、パフォーマンスはひどいです、この種のものはデータベースに属していませんとにかく。

+1

小さなレポートの場合、これはSQLでは大したことではありません。正しくコーディングすれば、パフォーマンスは問題にはなりません。 – datagod

0

selectステートメントの変数に複数の値を割り当てることができます。私はこれをレコードを「平らにする」と呼びます。

declare @WorkPlace varchar(max) 
select @WorkPlace = '' -- it is important to be NOT null 

select @WorkPlace = @WorkPlace + WorkPlace + ', ' 
    from YourTable 
where EmployeeName = 'Gopi' 

最後の '、'を文字列から削除するコードを追加できます。

+1

メモとして、これは一度に1人の従業員に対して機能します。 –

+0

それは本当です。私は大規模なデータセットでこのテクニックを使用しません。 – datagod

+0

私は複数の従業員のデータを動的に取得する必要があります.... – ksg

2

テーブルtblWorkplacetblEmployeeがどのように接続されているかはあまり明確ではありません。多対多のリンクテーブルなどを使用していると想定しています。

この(をテストするため私は自分のテーブル変数を使用して、テーブルを交換しました@Employee@Workplaceなど)

SELECT 
    e.EmpName, 
    (SELECT STUFF(
     (SELECT ',' + w.WPName 
     FROM @Workplace w 
     INNER JOIN @WorkplaceEmployeesLink we ON w.WorkplaceID = we.WorkplaceID 
     WHERE we.EmpID = e.EmpID 
     FOR XML PATH('') 
     ), 1, 1, '') 
    ) AS Workplaces 
FROM @Employee e 

:その場合は

は、あなたはこのようなものを使用することができます

EmpName Workplaces 
Gopi  India,Pakistan 

そのような出力を私に与えます。

基本的には、内部のFOR XML PATH('')は各従業員の職場のリストを選択し、','の各職場の前に追加するので、,India,Pakistanのようになります。

STUFFメソッドは、その結果の文字列の1桁目に空の文字列を埋め込み、最初のカンマを削除します。これにより、希望する職場のリストが得られます。

関連する問題