5

重複の可能性:
多くの行を1つのテキスト文字列に連結しますか?

。という名前のテーブルがあるとしますtblContractMail。以下のデータを含むサンプルテーブル:

ここに画像の説明を入力してください

次の出力を生成するSQLクエリを作成する必要があります。

'abc@akij.net; efg@akij.net; hjk@akij.net'

私は2つの可能性を知っています:

DECLARE @str varchar(4000)
SELECT @str = COALESCE(@str + ';', '') + strContract FROM tblContractMail 
SELECT @str

と:

DECLARE @str varchar(4000)
SET @str = (SELECT strContract + ';' FROM tblContractMail FOR XML PATH(''))
SET @str = SUBSTRING(@str, 1, LEN(@str)-1)
SELECT @str

この出力を単一のクエリで取得する方法はありますか(つまり、変数を宣言せずに)?

4

1 に答える 1

5

最初の方法は変数に依存しているため、最初の方法では答えはノーです。

ただし、変数なしで2番目のアプローチを簡単に使用できます。わずかに変更するだけで、次のようになります。

SELECT 
  SUBSTRING(
    (SELECT ';' + strContract FROM tblContractMail FOR XML PATH('')),
    2,
    2147483647
  )

ご覧のとおり、セパレータはアイテムの前にあります。その結果、先頭のセミコロンを省略して、2番目の文字から文字列を切り取り始めます。長さ指定子は、正確に長さから1を引いたものである必要はありません。かなり大きな数を指定でき、関数は2番目の文字から最後まですべてを返します。この場合、最大int値が指定されています。

于 2012-06-03T04:15:58.603 に答える