我正在尝试使用'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和outside之间复制from子句,但这需要保持from子句同步。我想得到列表和计数,但只写了一次from子句。
答案 0 :(得分:2)
如何从CTE而不是临时表中绘制数据?
With CTE As (
Select
[col]
From
#List
-- Many joins
-- Complicated where clause
)
Select
(Select ',' + [col] From Cte For Xml Path('')) As [List],
Count(*) As [Count]
From
CTE
这将允许您将联接和搜索谓词保留在一个位置。
答案 1 :(得分:1)
您不需要CTE就可以直接使用子查询方法
SELECT
COUNT(*) AS [Count],
(SELECT ',' + [col] FROM #List FOR XML PATH('')) AS [List]
FROM #List