1

我必须从多个值的源插入单个列/行。我正在使用东西箱,我很接近,但我错过了预期的回报之一,所以我不确定我需要做什么来确保我得到我正在寻找的结果。

这是我的声明:

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

结果是 DDD

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

我怎样才能确保我不会删除我的第一次退货,如果那是它正在做的事情。当我尝试 0,1 时,它失败了。

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

4

2 回答 2

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
于 2017-11-20T14:56:12.630 回答
1

对于您的查询,您不需要STUFF(). 做就是了:

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

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

于 2017-11-20T14:50:38.680 回答