Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Case / 7 сообщений из 7, страница 1 из 1
13.11.2007, 12:31
    #34934864
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Case
Допустим Есть таблица
Обращаюсь к ней
select * from AAA

Выводится результат
A
---
5
6
Хочу вывести справа колонки

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select *
case 
 when A= 5  then 'YES' as B
 when A= 6  then 'NO' as B
end,
case 
 when A= 5  then 'YES' as C
 when A= 6  then 'NO' as C
end,
case 
 when A= 5  then 'YES' as D
 when A= 6  then 'NO' as D
end
from AAA
можно ли как-нибудь все 3 эти три кейса сбить в 1
что-то типо

Код: plaintext
1.
2.
3.
4.
5.
6.
select *
case 
 when A= 5  then ('YES' as B 'YES' as C 'YES' as D)
 when A= 6  then ('NO' as B 'NO' as C 'NO' as D)
end
from AAA
...
Рейтинг: 0 / 0
13.11.2007, 12:56
    #34934973
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Case
select a, b, b as c, b as d from ( select a, case when a=5 then 'YES' when a=6 then 'NO' end as b from aaa ) as bbb;
...
Рейтинг: 0 / 0
13.11.2007, 12:57
    #34934984
pamir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Case
Код: plaintext
1.
2.
3.
4.
select cs.* from aaa, 
  (select  5  as a, 'yes' as b, 'yes' as c, 'yes' as d 
   union all 
   select  6  as a, 'no' as b, 'no' as c, 'no' as d ) cs
where aaa.a = cs.a
Гы. Автору явно нужно что-то другое, но...
...
Рейтинг: 0 / 0
13.11.2007, 13:14
    #34935075
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Case
LeXa NalBatselect a, b, b as c, b as d from ( select a, case when a=5 then 'YES' when a=6 then 'NO' end as b from aaa ) as bbb;
Это я как пример привел тчо значения будут одинаковы
на самом деле будут разыне

Если б они были одинаковы зачем мне надо было создавать н копии
...
Рейтинг: 0 / 0
13.11.2007, 13:31
    #34935158
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Case
-=Koba=-Это я как пример привел тчо значения будут одинаковы
на самом деле будут разыне:-) ну так привели бы пример
Код: plaintext
1.
 when A= 5  then ('YES' as B 'FIVE' as C 'LESS' as D)
 when A= 6  then ('NO' as B 'SIX' as C 'MORE' as D)

-=Koba=-Если б они были одинаковы зачем мне надо было создавать н копиинередко трудно догадаться, зачем автору вопроса понадобилось то или иное, поэтому чаще я этим вопросом и не задаюсь :-)

вариант pamir, наверное то что вам нужно
...
Рейтинг: 0 / 0
13.11.2007, 14:09
    #34935329
tkopets
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Case
-=Koba=-можно ли как-нибудь все 3 эти три кейса сбить в 1
что-то типо

Код: plaintext
1.
2.
3.
4.
5.
6.
select *
case 
 when A= 5  then ('YES' as B 'YES' as C 'YES' as D)
 when A= 6  then ('NO' as B 'NO' as C 'NO' as D)
end
from AAA

Зачем тебе 3 одинаковых колонки???
ИМХО, плохая идея...

Но если оч. надо:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
-- вариан с одним CASE
SELECT a, yes_no AS b, yes_no AS c, yes_no AS d
  FROM (
        select a, 
               case 
                 when A= 5  then 'YES'
                 when A= 6  then 'NO'
               end as yes_no
          from AAA
       ) just_alias;


-- пишем функции
CREATE OR REPLACE FUNCTION yesno(int, int, int)
RETURNS TEXT AS $$
  -- $1 - value to compare
  -- $2 - YES
  -- $3 - NO
  SELECT CASE WHEN $ 1  = $ 2  THEN 'YES'
              WHEN $ 1  = $ 3  THEN 'NO'
              ELSE 'UNKNOWN'
         END;
$$ LANGUAGE SQL STABLE;

-- проверяем
SELECT a, 
       yesno(a, 5 , 6 ) AS b,
       yesno(a, 5 , 6 ) AS c,
       yesno(a, 5 , 6 ) AS d
  FROM AAA;


-- конкретно твой вариант
CREATE OR REPLACE FUNCTION yesno_56(int)
RETURNS TEXT AS $$
  -- $1 - value to compare
  -- $2 - YES (5)
  -- $3 - NO (6)
  SELECT yesno($ 1 , 5 , 6 );
$$ LANGUAGE SQL STABLE;


-- проверяем
SELECT a, 
       yesno_56(a) AS b,
       yesno_56(a) AS c,
       yesno_56(a) AS d
  FROM AAA;


Ура!
...
Рейтинг: 0 / 0
13.11.2007, 14:22
    #34935370
tkopets
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Case
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE OR REPLACE FUNCTION yesno_new(int, int, int, text, text)
RETURNS TEXT AS $$
  -- $1 - value to compare
  -- $4 - yes text
  -- $5 - no text
  SELECT CASE WHEN $ 1  = $ 2  THEN $ 4 
              WHEN $ 1  = $ 3  THEN $ 5 
              ELSE 'UNKNOWN'
         END;
$$ LANGUAGE SQL STABLE;



SELECT a, 
       yesno_new(a,  5 ,  6 , 'да, да я 5!!!', 'почему я 6 ???') AS b,
       yesno_new(a,  7 ,  8 , 'счастливая 7', '8 рулез!') AS c,
       yesno_new(a,  112345 ,  2042342345 , 'много, однако', 'я таких чисел не знаю') AS D
  FROM AAA;
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Case / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]