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

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

SQL [D5, Oracle]


Страницы:   1 2

Старик ©   (2002-09-23 16:36:00) 

Есть таблица из двух полей: Nom и Cvet;
Nom -числа.
Cvet принимает только три разных значения - red,green,blue.
Как получить таблицу вида
Nom Cv1 Cv2 cv3
13 red
26 green
22 red
54 blue
Благодарю за соучастие.


Старик   (2002-09-24 10:50:00) [21]

>robi
У меня выдает ошибку: Token WHEN line number 2
>Black Cat
Когда наступает событие OnCalcField ?


passm   (2002-09-23 17:26:00) [22]

Ясно. Просто у меня DB2, и она требует CAST, дабы ей интересен тип моего NULL"а.

Black Cat © (23.09.02 17:08)> И получишь ошибку при компиляции: Oridinal type required.
В данном случае необходима конструкция if ... then.


robi   (2002-09-23 17:19:00) [23]

>passm ©
А можно и без cast:

SELECT T1.NOM,
CASE T1.CVET WHEN "red" THEN T1.CVET ELSE NULL END AS CV1,
CASE T1.CVET WHEN "green" THEN T1.CVET ELSE NULL END AS CV2,
CASE T1.CVET WHEN "blue" THEN T1.CVET ELSE NULL END AS CV3
FROM TABLE1 T1

У меня работает!


Black Cat   (2002-09-23 17:08:00) [24]

В датасете в фиелд эдиторе добавляешь 3 новых поля типа calculated: cv1,cv2,cv3.
На OnCalcField датасета цепляешь раскейсовщик типа
case dataset1.FieldValue["cvet"] of
"red" : dataset1.FieldValue["cv1"]:="red";
"green" : dataset1.FieldValue["cv2"]:="green";
"blue" : dataset1.FieldValue["cv3"]:="blue";
end;


Старик   (2002-09-23 17:08:00) [25]

На сегодняшний вечер хватит информации.
Всем спасибо.


passm   (2002-09-23 17:03:00) [26]

SELECT T1.NOM,
CASE T1.CVET WHEN "red" THEN T1.CVET ELSE CAST(NULL AS VARCHAR(5)) END AS CV1,
CASE T1.CVET WHEN "green" THEN T1.CVET ELSE CAST(NULL AS VARCHAR(5)) END AS CV2,
CASE T1.CVET WHEN "blue" THEN T1.CVET ELSE CAST(NULL AS VARCHAR(5)) END AS CV3
FROM TABLE1 T1

robi © (23.09.02 16:49) > У тебя в выражении CASE возвращаются результаты разных типов (INTEGER, CHARACTER), что должно привести к ошибке.


Старик   (2002-09-23 16:59:00) [27]

>Black Cat
А подробней где узнать?


Black Cat   (2002-09-23 16:51:00) [28]

3 calculated fields


robi   (2002-09-23 16:49:00) [29]

Вообще-то у тебя в таблице только два поля,по одному ты хочешь выбирать ед.значения для Nom.
Попробуй это:

select Nom,
(case when Cvet = "red" then "red" else 0 end) Cv1,
(case when Cvet = "green" then "green" else 0 end) Cv2,\
(case when Cvet = "blue" then "blue" else 0 end) Cv3
from table
order by Nom


Страницы:   1 2

Наверх

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