Sql server SQL逗号分隔值与合并
我的问题是:Sql server SQL逗号分隔值与合并,sql-server,coalesce,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
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,第16级,状态1,第25行将varchar值“234565437854”转换为数据类型int时,转换失败 目前,我正在SQL Server中测试第二个查询并得到此错误,但实际上我必须在teradata中运行第二个查询,并且必须传递来自SQL Server的查询1结果
@Groups
)。我想,如果我能够将@Groups
返回为'2345'、'6543'、'7854',应该可以解决我的问题
请指导如何实现这一点或者改用表变量
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
结果:
'2345','6543','7854'
无论如何,这可能行不通。创建一个子查询从TBGOUPSTAT检索数据不是更好吗?这与OP POST的逻辑不同,因为它只是复制表变量中TBLGROUP中的行,而不是使用不受支持的技巧使用聚合连接字符串。更重要的是,为什么?正如@Simon所建议的,更好的方法是直接进行子查询(或连接)-无需重复。。。我。。。这是我写得最快的一篇文章,也是我看到OP试图使用变量时想到的第一件事。西蒙在我发布我的答案之前发表了这一评论。。问题是查询1在SQL server中,查询2在Teradata中@组将通过一个进程作为变量传递给Teradata。所以不能使用子查询或表变量。如果这有助于理解我的问题,让我重新表述我的问题-此查询如何返回逗号分隔的值?结果不必在变量中,从[dbo].[tblGroups]@bjones中选择不同的GroupID,我已经尝试过了。没有正确地给每个数字加引号