Недопустимое количество аргументов в операторе вещи с регистром в SQL
Я должен сделать вставку в один столбец / строку из источника нескольких значений. Я использую дело с вещами, и я так близок, но мне не хватает одного из ожидаемых результатов, поэтому я не уверен, что мне нужно сделать, чтобы убедиться, что я получаю результаты, которые ищу.
ЗДЕСЬ мое заявление:
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)
2 ответа
Для вашего запроса вам не нужно STUFF()
, Просто делать:
SELECT (CASE WHEN TotalAmount <= 0 THEN 'C' ELSE 'D' END)
FROM Charges
WHERE ChargeNumber = 123
FOR XML Path('');
STUFF()
нужен только тогда, когда у вас есть разделитель. Он удаляет разделитель в начале строки результата. Без разделителя он удаляет первое значение, поэтому вам не хватает одного из 'D'
s.
Если вы измените 2 с 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