Форум: "Базы";
Текущий архив: 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