Недопустимое количество аргументов в операторе вещи с регистром в 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
Другие вопросы по тегам