'For Xml Path' T-SQLを使用して、列から値のコンマ区切りリストを生成しようとしています。これはうまく機能しているようですが、問題は、カンマ区切りのリスト内のアイテムの数を取得したいということです。カンマ区切りのリストを生成するために使用しているコードの例を次に示します。
Create Table #List ([col] varchar)
Insert Into #List Select '1';
Insert Into #List Select '2';
Insert Into #List Select '3'
Select ',' + [col] From #List For Xml Path('')
これにより、期待どおりの結果が1、2、3になりますが、アイテムが3つあるというカウントを取得する方法はありません。カウントを追加しようとすると、xmlに追加されるだけです。このコードをcteと組み合わせて、カウントを取得しました。
With CTE As (
Select
[col]
From
#List
)
Select
(Select ',' + [col] From #List For Xml Path('')) As [List],
Count(*) As [Count]
From
CTE
CTEを使用せずにノードの数を取得するためのより簡単でクリーンな方法はありますか?内側のselectの内側と外側のfrom句を複製するだけでよいことが指摘されましたが、そのためにはfrom句の同期を維持する必要があります。リストとカウントの両方を取得したいのですが、from句を1回だけ記述します。