SQL 中带有 case 的 stuff 语句中的参数数量无效

Invalid # of Arguments in a stuff statement with case in SQL

我必须从多个值的来源插入单个 column/row。我正在使用 stuff case,我已经很接近了,但是我错过了一个预期的 returns,所以我不确定我需要做什么来确保我得到我想要的结果我在找。

这是我的声明:

SELECT STUFF((SELECT CASE WHEN TotalAmount <=0 THEN 'C' ELSE 'D' END FROM Charges WHERE ChargeNumber=123 FOR XML Path('')), 1,1,'')

结果是D D D

但是,我实际上有四行,所以我应该看到 D D D D

如果我的第一个 return 正在这样做,我如何确保不删除它。当我尝试 0,1 时,它失败了。

非常感谢任何建议,谢谢! (运行 在 SQL 服务器 2012 中)

对于您的查询,您不需要 STUFF()。只要做:

SELECT (CASE WHEN TotalAmount <= 0 THEN 'C' ELSE 'D' END)
FROM Charges
WHERE ChargeNumber = 123
FOR XML Path('');

STUFF() 仅当您有分隔符时才需要。它删除结果字符串开头的分隔符。如果没有分隔符,它会删除第一个值,这就是为什么您缺少 'D's.

的原因

如果你把第二个 1 改成 0 就可以了。 例如,

DECLARE @Charges TABLE (ChargeNumber int, TotalAmount int)

INSERT INTO @Charges VALUES (123, 100), (123, 200), (123,100), (123, 300)

SELECT STUFF((SELECT CASE WHEN TotalAmount <=0 
                           THEN 'C' ELSE 'D' 
                     END 
               FROM @Charges 
              WHERE ChargeNumber = 123 FOR XML Path('')), 1,0,'')

给出输出:

DDDD