tblEmployee
とtblWorkPlace
という2つのテーブルがあります。 2番目の表は、各従業員の複数の行で構成されています。私は次のように結果を得たいと思う。SQL Serverでコンマ区切りの値を取得する方法は?
EmployeeName WorkPlace
Gopi India,Pakistan,...
Ie. tblWorkPlace
が従業員の複数の行で構成されている場合は、データをカンマで区切って1行に入力します。
どうすればこの結果が得られますか?
tblEmployee
とtblWorkPlace
という2つのテーブルがあります。 2番目の表は、各従業員の複数の行で構成されています。私は次のように結果を得たいと思う。SQL Serverでコンマ区切りの値を取得する方法は?
EmployeeName WorkPlace
Gopi India,Pakistan,...
Ie. tblWorkPlace
が従業員の複数の行で構成されている場合は、データをカンマで区切って1行に入力します。
どうすればこの結果が得られますか?
これを行うには、クライアント側にコードが必要です。これはSQLサーバーでこれを行うことは可能ですが、それは自明ではない、パフォーマンスはひどいです、この種のものはデータベースに属していませんとにかく。
小さなレポートの場合、これはSQLでは大したことではありません。正しくコーディングすれば、パフォーマンスは問題にはなりません。 – datagod
selectステートメントの変数に複数の値を割り当てることができます。私はこれをレコードを「平らにする」と呼びます。
declare @WorkPlace varchar(max)
select @WorkPlace = '' -- it is important to be NOT null
select @WorkPlace = @WorkPlace + WorkPlace + ', '
from YourTable
where EmployeeName = 'Gopi'
最後の '、'を文字列から削除するコードを追加できます。
テーブルtblWorkplace
とtblEmployee
がどのように接続されているかはあまり明確ではありません。多対多のリンクテーブルなどを使用していると想定しています。
この(をテストするため私は自分のテーブル変数を使用して、テーブルを交換しました@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桁目に空の文字列を埋め込み、最初のカンマを削除します。これにより、希望する職場のリストが得られます。
ここにdifferent ways to get comma separated valuesへのリンクがあります。
どのバージョンのSQL Serverをお使いですか? –