Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как заменить iif от Access в MsSQLServer / 13 сообщений из 13, страница 1 из 1
19.11.2004, 15:30:59
    #32791715
yuniki
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заменить iif от Access в MsSQLServer
Как заменить 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
19.11.2004, 15:33:34
    #32791724
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заменить iif от Access в MsSQLServer
Код: plaintext
1.
SELECT "Клиенты".Id FROM "Клиенты" 
WHERE CASE WHEN [Клиенты].Id= 1  THEN  1  ELSE  0  END
...
Рейтинг: 0 / 0
19.11.2004, 15:34:12
    #32791728
Гео
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заменить iif от Access в MsSQLServer
ошибки тут:

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
19.11.2004, 15:35:31
    #32791733
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заменить iif от Access в MsSQLServer
Код: plaintext
1.
SELECT "Клиенты".Id FROM "Клиенты" 
WHERE CASE WHEN [Клиенты].Id= 1  THEN  1  ELSE  0  END =[Клиенты].[Инн]
...
Рейтинг: 0 / 0
19.11.2004, 15:40:01
    #32791750
yuniki
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заменить iif от Access в MsSQLServer
А почему не проходит :
SELECT "Клиенты".Id FROM "Клиенты"
WHERE CASE WHEN [Клиенты].Id=1 THEN 1=0 ELSE 0=0 END
...
Рейтинг: 0 / 0
19.11.2004, 15:43:48
    #32791770
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заменить iif от Access в MsSQLServer
потому что синтаксис неправильный!
...
Рейтинг: 0 / 0
19.11.2004, 15:58:57
    #32791843
yuniki
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заменить iif от Access в MsSQLServer
Ну спасибо,

а Ваш

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

почему не проходит ?
...
Рейтинг: 0 / 0
19.11.2004, 15:59:55
    #32791849
yuniki
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заменить iif от Access в MsSQLServer
Вообще , как я понял в MsSQL boolean нет , и как удобнее тогда работать с логическими выражениями ?
...
Рейтинг: 0 / 0
19.11.2004, 16:37:51
    #32791973
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заменить iif от Access в MsSQLServer
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
19.11.2004, 16:43:01
    #32791985
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заменить iif от Access в MsSQLServer
yunikiВообще , как я понял в MsSQL boolean нет , и как удобнее тогда работать с логическими выражениями ?
Скорее, не так. В MSSQL boolean есть, но нет, как в jet-SQL неявного преобразования, например, числа, в boolean.
...
Рейтинг: 0 / 0
19.11.2004, 18:44:37
    #32792223
yuniki
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заменить iif от Access в MsSQLServer
Да вот пока непонятно - есть или нет :
С одной стороны типа данных такого нет
С другой стороны выражение может быть 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
19.11.2004, 18:53:09
    #32792236
incold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заменить iif от Access в MsSQLServer
Можно попробовать так

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


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