powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как заменить iif от Access в MsSQLServer
13 сообщений из 13, страница 1 из 1
Как заменить iif от Access в MsSQLServer
    #32791715
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как заменить iif от Access в MsSQLServer

Если в Access было :
SELECT "Клиенты".Id FROM "Клиенты"
WHERE iif("Клиенты".Id=1,1,0)="Клиенты"."Инн"

То в MsSQLServer2000:
SELECT "Клиенты".Id FROM "Клиенты"
WHERE CASE WHEN [Клиенты].Id=1 THEN [Клиенты].[Инн]=1 ELSE [Клиенты].[Инн]=0 END

не проходит

Как правильно ?
...
Рейтинг: 0 / 0
Как заменить iif от Access в MsSQLServer
    #32791724
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
SELECT "Клиенты".Id FROM "Клиенты" 
WHERE CASE WHEN [Клиенты].Id= 1  THEN  1  ELSE  0  END
...
Рейтинг: 0 / 0
Как заменить iif от Access в MsSQLServer
    #32791728
Гео
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ошибки тут:

SELECT "Клиенты".Id FROM "Клиенты"
WHERE CASE WHEN [Клиенты].Id=1 THEN [Клиенты].[Инн]=1 ELSE [Клиенты].[Инн]=0 END

наверное, нужно
SELECT "Клиенты".Id FROM "Клиенты"
WHERE "Клиенты"."Инн"=CASE WHEN [Клиенты].Id=1 THEN 1 ELSE 0 END
...
Рейтинг: 0 / 0
Как заменить iif от Access в MsSQLServer
    #32791733
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
SELECT "Клиенты".Id FROM "Клиенты" 
WHERE CASE WHEN [Клиенты].Id= 1  THEN  1  ELSE  0  END =[Клиенты].[Инн]
...
Рейтинг: 0 / 0
Как заменить iif от Access в MsSQLServer
    #32791750
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему не проходит :
SELECT "Клиенты".Id FROM "Клиенты"
WHERE CASE WHEN [Клиенты].Id=1 THEN 1=0 ELSE 0=0 END
...
Рейтинг: 0 / 0
Как заменить iif от Access в MsSQLServer
    #32791770
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
потому что синтаксис неправильный!
...
Рейтинг: 0 / 0
Как заменить iif от Access в MsSQLServer
    #32791843
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну спасибо,

а Ваш

SELECT "Клиенты".Id FROM "Клиенты"
WHERE CASE WHEN [Клиенты].Id=1 THEN 1 ELSE 0 END

почему не проходит ?
...
Рейтинг: 0 / 0
Как заменить iif от Access в MsSQLServer
    #32791849
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще , как я понял в MsSQL boolean нет , и как удобнее тогда работать с логическими выражениями ?
...
Рейтинг: 0 / 0
Как заменить iif от Access в MsSQLServer
    #32791973
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yunikiНу спасибо,

а Ваш

SELECT "Клиенты".Id FROM "Клиенты"
WHERE CASE WHEN [Клиенты].Id=1 THEN 1 ELSE 0 END

почему не проходит ?

потому что тоже ошибка синтаксиса

правильно так
Код: plaintext
1.
SELECT "Клиенты".Id FROM "Клиенты" 
WHERE CASE WHEN [Клиенты].Id= 1  THEN  1  ELSE  0  END =[Клиенты].[Инн]


CASE WHEN [Клиенты].Id=1 THEN 1 ELSE 0 END - это выражение

нельзя писать
where выражение

надо писать
where выражение = выражение
...
Рейтинг: 0 / 0
Как заменить iif от Access в MsSQLServer
    #32791985
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yunikiВообще , как я понял в MsSQL boolean нет , и как удобнее тогда работать с логическими выражениями ?
Скорее, не так. В MSSQL boolean есть, но нет, как в jet-SQL неявного преобразования, например, числа, в boolean.
...
Рейтинг: 0 / 0
Как заменить iif от Access в MsSQLServer
    #32792223
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да вот пока непонятно - есть или нет :
С одной стороны типа данных такого нет
С другой стороны выражение может быть booolean типа

Expression Results
For a simple expression built of a single constant, variable, scalar function, or column name, the data type, collation, precision, scale, and value of the expression is the data type, collation, precision, scale, and value of the referenced element.

When two expressions are combined using comparison or logical operators, the resulting data type is Boolean and the value is one of three values: TRUE, FALSE, or UNKNOWN.
For more information about Boolean data types, see Operators.

When two expressions are combined using arithmetic, bitwise, or string operators, the operator determines the resulting data type.

Complex expressions made up of many symbols and operators evaluate to a single-valued result. The data type, collation, precision, and value of the resulting expression is determined by combining the component expressions, two at a time, until a final result is reached. The sequence in which the expressions are combined is defined by the precedence of the operators in the expression.

С третьей стороны CASE, являясь функцией, возвращает результат :

Syntax
Simple CASE function:

CASE input_expression
WHEN when_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
]
END

Searched CASE function:

CASE
WHEN Boolean_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
]
END

Result Types

Returns the highest precedence type from the set of types in result_expressions and the optional else_result_expression. For more information, see Data Type Precedence.

Result Values

Simple CASE function:
Evaluates input_expression, and then, in the order specified, evaluates input_expression = when_expression for each WHEN clause.


Returns the result_expression of the first (input_expression = when_expression) that evaluates to TRUE.


If no input_expression = when_expression evaluates to TRUE, SQL Server returns the else_result_expression if an ELSE clause is specified, or a NULL value if no ELSE clause is specified.
Searched CASE function:
Evaluates, in the order specified, Boolean_expression for each WHEN clause.


Returns result_expression of the first Boolean_expression that evaluates to TRUE.


If no Boolean_expression evaluates to TRUE, SQL Server returns the else_result_expression if an ELSE clause is specified, or a NULL value if no ELSE clause is specified.


Ну и почему нельзя оцененное CASE как boolean выражение использовать в Where условии
????????
...
Рейтинг: 0 / 0
Как заменить iif от Access в MsSQLServer
    #32792236
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно попробовать так

Код: plaintext
1.
2.
3.
SELECT "Клиенты".Id 
FROM "Клиенты" 
WHERE ([Клиенты].Id= 1  and "Клиенты"."Инн"= 1 ) 
or ([Клиенты].Id<> 1  and "Клиенты"."Инн"= 0 )
...
Рейтинг: 0 / 0
Как заменить iif от Access в MsSQLServer
    #32792255
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользуйся
Код: plaintext
1.
2.
3.
4.
SELECT Клиенты.Id 
FROM Клиенты 
WHERE Клиенты.Инн =CASE WHEN [Клиенты].Id= 1  
THEN  1  ELSE  0  END
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как заменить iif от Access в MsSQLServer
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]