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