SQL逗号用COALESCE分隔值

时间:2017-05-15 19:05:25

标签: sql-server coalesce

我的查询:

DECLARE @Groups VARCHAR(MAX)

SELECT 
    @Groups = COALESCE(@Groups + ',', '') + CONVERT(VARCHAR(5), GroupID)
FROM  
    [dbo].[tblGroups]

PRINT @Groups

返回

            2345,6543,7854

我希望@Groups返回'2345','6543','7854',因为我需要在另一个查询中使用@Groups

SELECT *   
FROM MyTable
WHERE GROUP_ID IN (@Groups)

我收到错误:

  

Msg 245,Level 16,State 1,Line 25
  将varchar值'2345,6543,7854'转换为数据类型int。

时转换失败

目前,我正在测试SQL Server中的第二个查询并收到此错误,但实际上我必须在teradata中运行第二个查询,并且必须传递来自SQL Server的查询1结果@Groups。我想如果我能够将@Groups作为'2345','6543','7854'返回,它应该可以解决我的问题。

请指导如何实现此目标

1 个答案:

答案 0 :(得分:1)

或许使用表变量?

para
emphasis - foobar
subject - Barbar

*********************** 编辑 **************** *******

DECLARE @Groups TABLE (Groups VARCHAR(MAX))
INSERT INTO @Groups
SELECT CONVERT(VARCHAR(5),GroupID)
FROM [dbo].[tblGroups]

SELECT * FROM MyTable
WHERE GROUP_ID IN (SELECT *
                   FROM @Groups)

**** 编辑 ****

DECLARE @Groups VARCHAR(MAX)
SELECT
    @Groups = COALESCE(@Groups + ',', '''') + CONVERT(VARCHAR(15), GroupID) + ''''
FROM  
    [dbo].[tblGroups]

PRINT @Groups

结果:

DECLARE @Tab TABLE (GroupID INT)
INSERT INTO @Tab
VALUES (2345),(6543),(7854)
DECLARE @Groups VARCHAR(MAX)
SELECT
    @Groups = COALESCE(@Groups + ',', '') +''''+ CONVERT(VARCHAR(5), GroupID) + ''''
FROM @Tab
SELECT @Groups