Запрос не повторяет значение true в iif ms-access sql

#c# #sql #database #ms-access

#c# #sql #База данных #ms-access

Вопрос:

Я хочу получить, RollNo присутствует ли оно при выполнении определенных условий, в противном случае оно должно возвращать -1. Но в моем случае оно возвращается, RollNo когда оно присутствует, в противном случае оно не возвращает ничего.

SQL находится под:-

 SELECT iif(isnull(RollNo),-1,RollNo) from students where SName = "sf" and FName= "da" and 
DOB=#7/16/2020# and ClassID = 0
  

Ответ №1:

Хм … Если вы всегда хотите возвращать ровно одну строку, тогда я бы предложил агрегирование:

 SELECT NZ(MAX(RollNo), -1)
FROM students 
WHERE SName = "sf" and FName= "da" and DOB=#7/16/2020# and ClassID = 0;
  

Если ничто не соответствует WHERE предложению, то MAX(RollNo) возвращается NULL — который преобразуется в -1 by NZ() .

Комментарии:

1. Это работает в access. Но я должен получить это в коде C #. nz не работает в c#

2. @MuhammadRizwan Сработает ли это: SELECT IIF(ISNULL(MAX(RollNo)), -1, MAX(RollNo) ?

3. @TimBiegeleisen это работает. Я проверил этот запрос.

4. @MuhammadRizwan . . . Можете ли вы определить, какая часть запроса не работает? Возможно, COALESCE() работает. NZ() определенно является частью MS Access: techonthenet.com/access/functions/advanced/nz.php .

5. @MuhammadRizwan . . . Вы можете заменить его на IIF(MAX(RollNo) IS NULL, MAX(RollNo), -1) .

Ответ №2:

Это возвращает ровно одну строку с полем RollNo .

 SELECT iif(isnull(max(RollNo)),-1,max(RollNo)) from students where SName = "sf" and
 FName= "da" and DOB=#7/16/2020# and ClassID = 0
  

если условия в предложении where удовлетворяют ему, возвращает RollNo в противном случае возвращает -1

Комментарии:

1. Интересно ISNULL (метод VBA) работал с подключением доступа ODCB / OLEDB. Лучше использовать IS NULL выражение SQL.

2. Я не знаю, но это работает. IS NULL выражение также сработало.