Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.22;
Скачать: CL | DM;

Вниз

Вопрос по ADOQuery, синтаксис SQL?????   Найти похожие ветки 

 
Muhin-av   (2002-07-01 10:50) [0]

Уважаемые мастера, такая проблема: начал переделывать Аксесовского клиета на Делфифский, и в Аксесе был такой запрос:

SELECT Material.MaterialID,
------- вот моя проблема -----------------------------
IIf(IsNull([BeforUnionID]),[MaterialID],[BeforUnionID]) AS Шифр,
------------------------------------------------------
Material.MaterialName AS Наименование, Material.Unit AS [Ед изм], MaterialType.TypeName AS Тип
FROM Material INNER JOIN MaterialType ON Material.TypeID = MaterialType.TypeID
WHERE (((Material.TypeID)<>1))
ORDER BY IIf(IsNull([BeforUnionID]),[MaterialID],[BeforUnionID]), Material.MaterialName, Material.TypeID;

Почему-то в Делфи в ADOQuery, в тексте запроса не воспринимается оператор условия "iif ". Синтаксис SQL различается. Подскажите как этот IF пишется.


 
wicked ©   (2002-07-01 11:04) [1]

почитай в mssql books online про case...

а общий синтаксис такой:
case
when <условие 1> then <выражение 1>
when <условие 2> then <выражение 2>
.
.
.
else <выражение n>
end


 
Muhin-AV   (2002-07-01 11:34) [2]

Уважаемый wicked, я есть новичок в этом деле, не мог бы ты мой пример в этом синтаксисе показать. Очень на это надеюсь.


 
TSV ©   (2002-07-01 12:09) [3]

Да он тебе уже все написал...
select
...
,WorkPlace =
case
when h.IsDefault = 1 then CONVERT(varchar(30), "Основное место работы")
else CONVERT(varchar(30), "Дополнительное место работы")
end
...


Есть еще один вид CASE:
CASE input_expression
WHEN when_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
]
END

Вот пример (из BOL):
SELECT
...
,Category =
CASE type
WHEN "popular_comp" THEN "Popular Computing"
WHEN "mod_cook" THEN "Modern Cooking"
WHEN "business" THEN "Business"
WHEN "psychology" THEN "Psychology"
WHEN "trad_cook" THEN "Traditional Cooking"
ELSE "Not yet categorized"
END
...


А вообще - читай Books Online .


 
Delirium ©   (2002-07-01 12:09) [4]

> Muhin-AV

Уважаемый, давать примеры из Help-а, да ещё по элементарным вопросам, занятие скучное и неинтересное. Если я правильно понял вы переводите БД с ACCESS на MSSQL с соответствующей модификацией ПО. Для реализации выше означенного уловия в MSSQL достаточно функции ISNULL ( check_expression , replacement_value ), например:
select * from r_names
order by isNull(idSubSerie,id_name)

надо оговориться - поля должны быть одного типа.


 
Muhin-av   (2002-07-01 12:45) [5]

Вам хорошо- вы умные. Все приводите свои примеры. Но неужели трудно было для таких как я, показать, как должен был выглядеть мой вопрос в правильном написании.


 
TSV ©   (2002-07-01 13:18) [6]

Это из серии "разжевали, в рот положили, а он и глотать не хочет"...

select
m.MaterialID
,Shifr =
case
when BeforUnionID is null then m.MaterialID
else BeforUnionID
end
,m.MaterialName
,m.Unit
,mt.TypeName
from Material m
inner join MaterialType mt ON m.TypeID = mt.TypeID
where m.TypeID <> 1
...


ЗЫ
Учись думать сам, а не орать "Я не могу, сделайте за меня..."



Страницы: 1 вся ветка

Текущий архив: 2002.07.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.014 c
14-70878
Val
2002-06-21 11:26
2002.07.22
Краткий курс английского для инженеров


3-70641
Дмитрий757567
2002-07-01 17:58
2002.07.22
SP_WHO


3-70589
XTormentor
2002-06-28 13:51
2002.07.22
РУСИФИКАЦИЯ ДАННЫХ ПРИ РАБОТЕ В Delphi


3-70638
Ptr
2002-07-01 16:31
2002.07.22
SQLClientDataSet и Хранимые процедуры (ХП)


3-70651
Fissher
2002-07-01 17:19
2002.07.22
Индексы в таблицах Paradox 7