日期:2014-05-18  浏览次数:20713 次

求sql语句写法
比如:SELECT [ID] FROM [table1]

返回:
1
2
3
4

怎么写语句可以得到下
1,2,3,4,


------解决方案--------------------
SQL code

--> 测试数据:[tbl]
if object_id('[tbl]') is not null drop table [tbl]
create table [tbl]([id] int)
insert [tbl]
select 1 union all
select 2 union all
select 3 union all
select 4
declare @str varchar(20)
set @str=''
select @str=@str+','+LTRIM(id) from tbl
select RIGHT(@str,LEN(@str)-1) as new

/*
new
1,2,3,4
*/

------解决方案--------------------

select ltrim(id)+',' from [tb] for xml path('')
------解决方案--------------------
SQL code

表a 
name    num 
aa      1 
bb      2 
cc      4 
dd      4 
ee      2 
一条语句实现如下:
name 
aa,bb,cc,dd,ee 
DECLARE @STR VARCHAR(8000)
SELECT @STR=ISNULL(@STR+',','')+name FROM (SELECT DISTINCT NAME FROM A)AS T
SELECT @STR
问题描述:
无论是在sql 2000,还是在sql 2005 中,都没有提供字符串的聚合函数,
  所以,当我们在处理下列要求时,会比较麻烦:
有表tb, 如下:
id    value
1     aa
1     bb
2     aaa
2     bbb
2     ccc
需要得到结果:
id     values
1      aa,bb
2      aaa,bbb,ccc
即,group by id, 求value 的和(字符串相加)
1. 旧的解决方法
-- 1. 创建处理函数
CREATE FUNCTION dbo.f_str(@id int)
RETURNS varchar(8000)
AS
BEGIN
    DECLARE @r varchar(8000)
    SET @r = ''
    SELECT @r = @r + ',' + value
    FROM tb
    WHERE id=@id
    RETURN STUFF(@r, 1, 1, '')
END
GO
-- 调用函数
SELECt id, values=dbo.f_str(id) 
FROM tb 
GROUP BY id
-- 2. 新的解决方法
-- 示例数据
DECLARE @t TABLE(id int, value varchar(10))
INSERT @t SELECT 1, 'aa'
UNION ALL SELECT 1, 'bb'
UNION ALL SELECT 2, 'aaa'
UNION ALL SELECT 2, 'bbb'
UNION ALL SELECT 2, 'ccc'
-- 查询处理
SELECT *FROM (SELECT DISTINCT Id FROM @t)A
OUTER APPLY(
    SELECT [values]= STUFF(REPLACE(REPLACE(
            (   SELECT value FROM @t N
                WHERE id = A.id
                FOR XML AUTO
             ), '<N value="', ','), '"/>', ''), 1, 1, '')
)N
/*--结果
id          values
----------- ----------------
1           aa,bb
2           aaa,bbb,ccc
(2 行受影响)
--*/

写个函数或者使用XML,直接就可以调用了

------解决方案--------------------
探讨

引用:
select ltrim(id)+',' from [tb] for xml path('')


生成的列名字好长啊 是这样的XML_F52E2B61-18A1-11d1-B105-00805F49916B

我加上一个别名 改成这样的不行,该怎么弄?
select ltrim(id)+',' as A from [tb] for x……