我正在嘗試使用'For Xml路徑'T-SQL從列中生成一個以逗號分隔的值列表。這似乎工作得很好,但問題是我想獲得在逗號分隔列表中的項目的計數。這裏是我用來生成逗號的代碼示例分隔列表:Sql For Xml路徑獲取節點數
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子句。
這實際上是我最終使用的。但是,我最終不得不在使用CTE之前將複雜的選擇放入臨時表中。當我直接加入CTE時,表現非常糟糕。 CTE中的查詢返回大約需要2秒,但是,它會將整個查詢與逗號列表累積小時數結合起來。花了這麼長時間,我從來沒有讓它完成。如果我首先將複雜選擇放入臨時表中,則查詢需要一秒鐘才能運行。我唯一能想到的是,CTE中的選擇正在爲每次迭代重新運行? – user355930 2010-09-08 16:41:26