我正在尝试使用“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?有人指出,您可以在内部选择内部和外部复制 from 子句,但这需要保持 from 子句同步。我想同时获得列表和计数,但只写一次 from 子句。