2010-01-25

[psql] CASE WHEN END

Wyrażenie CASE w Postgresie działa i na pewno można je zastosować na wiele sposobów - mi się dziś przydało przy łączeniu dwóch kolumn.

Załóżmy, że mamy tabelę kejs:

create table kejs(
id serial primary key,
kod varchar(32),
nazw varchar(64)
);

insert into kejs (id, kod, nazw) VALUES ('1', '5.12.12234', 'COŚ');
insert into kejs (id, kod, nazw) VALUES ('2', '5.12.12343', 'KTOŚ');
insert into kejs (id, kod, nazw) VALUES ('3', '5.12.12222', 'PTYŚ');
insert into kejs (id, nazw) VALUES ('4', 'MIŚ');

i chcemy w zapytaniu połączyć dwie kolumny w jedną o szumnej nazwie "nazwa". Proste zapytanie:

SELECT
k.id,
k.kod || ' - ' || k.nazw as nazwa
FROM
kejs k
ORDER BY
k.kod,
k.nazw;

da nam rezultat:

 id | nazwa
----+-------------------
3 | 5.12.12222 - PTYŚ
1 | 5.12.12234 - COŚ
2 | 5.12.12343 - KTOŚ
4 |

Widać, że ostatni wiersz jest pusty - ponieważ kod tego wiersza jest pusty łączenie dwóch tabel nie zadziałało. Z pomocą przychodzi nam tu właśnie CASE:

SELECT
k.id,
CASE
WHEN k.kod is not null THEN k.kod || ' - ' || k.nazw
WHEN k.kod is null THEN k.nazw
END as nazwa
FROM
kejs k
ORDER BY
k.kod,
k.nazw;

W rezultacie otrzymujemy:

 id | nazwa
----+-------------------
3 | 5.12.12222 - PTYŚ
1 | 5.12.12234 - COŚ
2 | 5.12.12343 - KTOŚ
4 | MIŚ

Milutkie nie? :)

3 komentarze:

  1. fajne, swoją drogą Miś w środę

    aaa...i wywal jedno "można" ;]

    OdpowiedzUsuń
  2. aaa - wywalilem ;]

    Miś w środe powiadasz... spróbuje obejrzeć w takim razie... :)

    OdpowiedzUsuń