【问题标题】:SQL select list as comma separated values [duplicate]SQL选择列表作为逗号分隔值[重复]
【发布时间】:2016-06-04 04:10:28
【问题描述】:

我有一张带有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

【问题讨论】:

  • 您可以添加示例数据和预期输出吗?
  • 请问您要解决的更大问题是什么?我觉得可能有一些不必要的体操正在进行。
  • @DMason 你可能是对的。基本上我有日期范围的 CTE,对于每个日期范围,我需要选择一个项目列表。所以我几乎需要从数据库中返回分层数据。

标签: sql sql-server tsql


【解决方案1】:

试试这个

 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

无变量:

  select   STUFF(  (SELECT N',' + cast( id as nvarchar)  
  from TableX 
  FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)')  ,1,1,'')

【讨论】:

  • "问题是我不能使用声明的变量"
  • 我不添加可变大小写
  • @ErikE,他引用了原始问题。
【解决方案2】:

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

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

并且在你不能使用变量的上下文中使用函数

select  dbo.csv()

问候

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 2015-01-01
    • 1970-01-01
    • 2011-07-16
    • 2013-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多