TSQL如何动态构建字符串?

时间:2010-12-12 18:33:41

标签: sql-server tsql

假设我有一个包含这样的列的表:

| Name | Cat_id |

我不记得可以像这样构建varchar的函数

1,24|4,56|5,67

其中逗号前面的数字是Cat_id,逗号后面的数字是带有该ID的行数。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

这可以解决问题:

declare @s varchar(8000)
set     @s = ''

select  @s = @s + cast(cat_id as varchar(20)) + ',' + cast(count(*) as varchar(20)) + '|'
from    SomeTable
group by cat_id
option(maxdop 1) -- this sure there are no funny side-effects because of parallelism

print @s

或者你可以使用'for xml'或游标,但这应该更快。

关心GJ

答案 1 :(得分:0)

希望这会有所帮助(sql server 2005 +)...我没有测试该程序,因为我目前没有SQL Server

With Cte1 As(
Select Cat_ID, Count(Cat_ID),Cast(Cat_ID as Varchar) + Cast(Count(Cat_ID)) as MergedColumn from tbl 
group by Cat_ID),
cte2 as(
Select 
    Cat_ID
    , mergedData  = stuff((Select cast(MergedColumn + '|' as varchar) from tbl t2 where t2.Cat_ID  = t1.Cat_ID 
                  for xml path('')),1,1,'')
from tbl t1)

select mergedData from Cte2