Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.10.17;
Скачать: [xml.tar.bz2];

Вниз

SQL   Найти похожие ветки 

 
Старик   (2002-09-23 16:36) [0]

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


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

Вообще-то у тебя в таблице только два поля,по одному ты хочешь выбирать ед.значения для 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


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

3 calculated fields


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

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


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

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 17:08) [5]

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


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

В датасете в фиелд эдиторе добавляешь 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;


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

>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

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


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

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

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


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

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


 
Black Cat   (2002-09-24 12:05) [10]

См. хелп по ссылке "calculated fields"

OnCalcFields is called when

A dataset is opened.
The dataset enters edit mode.
A record is retrieved from the database.
Focus moves from one visual component to another, or from one column to another in a data-aware grid control and the current record has been modified.


 
Atamali Mamedov   (2002-09-24 12:34) [11]

select Nom,
decode (Cvet , "red","red",null) Cv1,
decode (Cvet , "green" ,"green",null) Cv2,
decode (Cvet , "blue" ,"blue",null) Cv3
from table
group by nom
order by Nom


 
Старик   (2002-09-24 12:45) [12]

>Atamali Mamedov
Oшибка: Invalid use in keyword
Token Null)
>Black Cat
I"m understand.


 
roottim   (2002-09-24 13:12) [13]

народ.. вы бы посмотрели на тип базы... это не IB
а старик видимо совсем стар чтобы перевести скл в оракловый вид
select Nom,
decode(cvet,"red","red",null) as cv1
decode(cvet,"green","green",null) as cv2
decode(cvet,"blue","blue",null) as cv3
from table
order by Nom



 
Старик   (2002-09-24 13:29) [14]

>Roottim
См. >Atamali Mamedov
P.S. Старик, естественно, стар, а то смог бы написать такой простенький запрос


 
Johnmen   (2002-09-24 13:41) [15]

"старик видимо совсем стар чтобы" указать вместо Null - ""


 
Старик   (2002-09-24 13:54) [16]

>Johnmen ©
>"старик видимо совсем стар чтобы" указать вместо Null - ""
Как быстро рисуются ответы,но...
Capability not supported.



 
roottim   (2002-09-24 14:12) [17]

чет и правда со зрением :)
select Nom,
decode(cvet,"red","red",null) as cv1,
decode(cvet,"green","green",null) as cv2,
decode(cvet,"blue","blue",null) as cv3,
from table
order by Nom


версию оракле!,.. и откуда выполнятся сей запрос?


 
Johnmen   (2002-09-24 14:29) [18]

Может быть, действительно, не Оракул ? :))))))


 
Старик   (2002-09-24 14:45) [19]

Граждане хорошие!
Простите старику за Oracle.У меня Paradox!!!Не ту кнопку жал!


 
roottim   (2002-09-24 14:56) [20]

если порядок не играет никакого значения.. можно попробовать так
select nom,cvet,"","" from table where cvet="red"
union all
select nom,"",cvet,"" from table where cvet="green"
union all
select nom,"","",cvet from table where cvet="blue"


 
Старик   (2002-09-24 15:11) [21]

>Roottim
Type mismatch in expression.


 
roottim   (2002-09-24 16:04) [22]

select nom,cvet,"нету","нету" from table where cvet="red"
union all
select nom,"нету",cvet,"нету" from table where cvet="green"
union all
select nom,"нету","нету",cvet from table where cvet="blue"

а так непробовал ?


 
Atamali Mamedov   (2002-09-24 16:20) [23]

SELECT nom,max(red) red,max(green) green,max(blue) blue from
select nom,cvet red "нету" green ,"нету" blue from table where cvet="red"
union all
select nom,"нету",cvet,"нету" from table where cvet="green"
union all
select nom,"нету","нету",cvet from table where cvet="blue"
group by nom order by nom


 
Старик   (2002-09-24 16:38) [24]

>Roottim
Опять
Type mismatch in expression
>Atamali Mamedov
Неправильный синтаксис.
> To ALL.
На сегодня хватит.
Спасибо ВСЕМ.


 
passm   (2002-09-25 09:12) [25]

А если так:
SELECT Q1.NOM, T1.CVET, T2.CVET, T3.CVET
FROM TABLE AS Q1
LEFT OUTER JOIN TABLE AS T1 ON (T1.NOM = Q1.NOM AND T1.CVET = "red")
LEFT OUTER JOIN TABLE AS T2 ON (T2.NOM = Q1.NOM AND T2.CVET = "green")
LEFT OUTER JOIN TABLE AS T3 ON (T3.NUM = Q1.NUM AND T3.CVET = "blue")


 
Старик   (2002-09-25 11:22) [26]

>passm
Ошибка в синтаксисе:Invalid use keyword - Table.
У меня PARADOX. Вчера каялся.
А где можно полюбопытствовать о локальном SQL?


 
passm   (2002-09-25 11:31) [27]

Старик (25.09.02 11:22)> Разумеется ошибка. Я же привел тебе схему запроса. Замени TABLE на реальную таблицу.


 
Старик   (2002-09-25 11:46) [28]

>passm
БЛАГОДАРЮ.Поехало.
Только вопросик: Я дополн. создал три таблицы T1,T2,T3 c этими полями(NOM,CVET). Или это может делать сам SQL?


 
passm   (2002-09-25 11:54) [29]

Старик (25.09.02 11:46)> Посмотри литературу по SQL. Дело в том, что T1,T2,T3 в запросе не отдельные таблицы (создавать их не нужно), а алиасы таблицы TABLE. Таблица соединяется сама с собой. Вобщем все данные запрашиваются исключительно из TABLE1.



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

Форум: "Базы";
Текущий архив: 2002.10.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.008 c
14-56329
Nikolay
2002-09-25 01:10
2002.10.17
Дремучего с Днем Рождения!


14-56291
AL2002
2002-09-23 16:21
2002.10.17
С винтом чё-то не так.


1-56151
Zuvom
2002-10-06 14:30
2002.10.17
Файлы данных


7-56373
Дмитрий Баранов
2002-08-09 12:14
2002.10.17
Прибить SYSTEM-процесс


7-56371
XeN
2002-08-09 13:58
2002.10.17
Please...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский