Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос по ADOQuery, синтаксис SQL????? [D6, MSSQL]


Muhin-av ©   (2002-07-01 10:50:00) 

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

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 пишется.


TSV   (2002-07-01 13:18:00) [1]

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

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
...


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


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

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


TSV   (2002-07-01 12:09:00) [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:00) [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 11:34:00) [5]

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


wicked   (2002-07-01 11:04:00) [6]

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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо