Как получить 0, если не найдена строка из запроса sql на сервере sql - PullRequest
0 голосов
/ 16 апреля 2020

Я получаю пустое значение с этим запросом от sql сервера

SELECT TOP 1 Amount from PaymentDetails WHERE Id = '5678'

у него нет строки, поэтому он возвращает пустое значение, поэтому я хочу, чтобы при отсутствии строки он возвращал 0

Я уже пробовал с COALESCE, но он не работает

как это решить?

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Вы выбираете произвольную сумму, поэтому одним из методов является агрегирование:

SELECT COALESCE(MAX(Amount), 0) 
FROM PaymentDetails
WHERE Id = '5678';

Обратите внимание, что если id - это число, то для сравнения не используйте одинарные кавычки.

Если честно, я ожидал бы, что SUM() будет более полезным, чем произвольное значение:

SELECT COALESCE(SUM(Amount), 0) 
FROM PaymentDetails
WHERE Id = '5678';
1 голос
/ 16 апреля 2020

Вы можете заключить подзапрос в ISNULL:

SELECT ISNULL((SELECT TOP 1 Amount from PaymentDetails WHERE Id = '5678' ORDER BY ????),0) AS Amount;

Не забудьте добавить столбец (или столбцы) к вашему ORDER BY, иначе вы получите противоречивые результаты, если более одна строка имеет одинаковое значение для Id. Однако, если Id уникален, удалите оба параметра TOP и ORDER BY, поскольку они не нужны.

Однако вы никогда не должны использовать TOP без ORDER BY, если только вы "довольны" противоречивыми результатами.

...