powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Case
7 сообщений из 7, страница 1 из 1
Case
    #34934864
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим Есть таблица
Обращаюсь к ней
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
Case
    #34934973
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Case
    #34934984
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Case
    #34935075
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Case
    #34935158
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=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
Case
    #34935329
tkopets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-=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
Case
    #34935370
tkopets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Case
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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