使用SQL中的大小写的stuff语句中的参数数量无效

时间:2017-11-20 14:42:11

标签: sql sql-server tsql case-expression

我必须从多个值的源中插入一个列/行。我使用的是这样的东西,而且我很近,但是我错过了一个预期的回报,所以我不知道我需要做些什么才能确保得到结果我正在寻找。

这是我的发言:

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

我如何确保我不会删除我的第一个回报,如果它正在做什么的话。当我尝试0,1它失败了。

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

2 个答案:

答案 0 :(得分:1)

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

SELECT (CASE WHEN TotalAmount <= 0 THEN 'C' ELSE 'D' END)
FROM Charges
WHERE ChargeNumber = 123
FOR XML Path('');
只有拥有分隔符时才需要

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

之一的原因

答案 1 :(得分:1)

如果将第二个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