Sql For Xml Path获取节点数

时间:2010-09-03 17:17:24

标签: sql sql-server xml path common-table-expression

我正在尝试使用'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子句。

2 个答案:

答案 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