SQL选择列表为逗号分隔值

时间:2016-06-03 19:52:25

标签: sql sql-server tsql

我有一个包含INT Id列的表格。我需要在子查询中选择ID作为逗号分隔值。

我试过了:

DECLARE @ids VARCHAR(MAX)
SELECT @ids= COALESCE(@ids +',' ,'') + Convert(nvarchar(8), Id)
FROM TableX

SELECT @ids

它可以工作,但问题是我不能使用声明的变量。有没有办法避免变量使用?

示例:

SELECT Id FROM TableX

结果:

1
2
5
7

我想:

1,2,5,7

2 个答案:

答案 0 :(得分:3)

试试这个

#!/bin/bash
#
# Separate (camera) images on directory
# to year named folders.
#
# All files must be named as "yyyy-mm-dd HH:MM:SS.ext"
#
for img in *.{jpg,jpeg,png}; do
  [ ! -f "$img" ] && continue
  year=${img:0:4}
  [ -d "$year" ] || mkdir "$year"
  mv -iv "$img" "$year/"
done

无变量:

 DECLARE  @query nvarchar(max)

 select @query = STUFF(  (SELECT N',' + cast( id as nvarchar)  
 from TableX 

 FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)')  ,1,1,'')

 select  @query

答案 1 :(得分:0)

您可以创建一个函数来放置代码

create function dbo.csv ()
returns varchar(max)
as
begin
    DECLARE @ids VARCHAR(MAX)
    SELECT @ids= COALESCE(@ids +',' ,'') + Convert(nvarchar(8), Id)
    FROM TableX

    return @ids
end

并且在上下文中使用fucntion,你不能使用变量

select  dbo.csv()

此致