<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Forum PostgreSQL - SELECT ... IF (???)]]></title>
	<link rel="self" href="http://forum.postgresql.org.pl/extern.php?action=feed&amp;tid=2249&amp;type=atom"/>
	<updated>2015-01-07T14:40:15Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.postgresql.org.pl/viewtopic.php?id=2249</id>
		<entry>
			<title type="html"><![CDATA[Odp: SELECT ... IF (???)]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=5408#p5408"/>
			<content type="html"><![CDATA[Działa!

Bardzo dziękuję :)]]></content>
			<author>
				<name><![CDATA[grzechu]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=963</uri>
			</author>
			<updated>2015-01-07T14:40:15Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=5408#p5408</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: SELECT ... IF (???)]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=5407#p5407"/>
			<content type="html"><![CDATA[distinct on ci pomoże.

Zasadniczo coś w stylu:

select
distinct on (btrim(...nazwa))
    btrim(...nazwa),
    split_part(..., ..., 1)
from ...
where ...
order by btrim(...nazwa), case adres.rodz_adr
when 'KOR' then 1
when 'TYM' then 2
...
WHEN 'INN' then 6
end
;]]></content>
			<author>
				<name><![CDATA[depesz]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1564</uri>
			</author>
			<updated>2015-01-06T20:36:39Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=5407#p5407</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[SELECT ... IF (???)]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=5406#p5406"/>
			<content type="html"><![CDATA[Uszanowanie wszystkim,

Potrzebuję wyciągnąć z tabeli adresy.
Adresy te mają określone cechy (np. korespondencyjny, stały, siedziby) i określoną wagę tych cech (np. najważniejszy jest korespondencyjny, potem tymczasowy, najmniej ważny inny).
Jak powinno wyglądać zapytanie znajdujące tylko jeden adres o najwyższej wadze?
Czyli - z poniższego przykładu - jak spowodować "wyjście" z CASE po znalezieniu pierwszego pasującego przypadku w kolejności takiej, jak jak to określono poniżej?

[code]
SELECT
    btrim(organizacja.nazwa_organiz),
    CASE adres.rodz_adr
        WHEN 'KOR' THEN split_part(adres.adres_opisowy, ', tel.' , 1)
        WHEN 'TYM' THEN split_part(adres.adres_opisowy, ', tel.' , 1)
        WHEN 'STA' THEN split_part(adres.adres_opisowy, ', tel.' , 1)
        WHEN 'ZAM' THEN split_part(adres.adres_opisowy, ', tel.' , 1)
        WHEN 'SIE' THEN split_part(adres.adres_opisowy, ', tel.' , 1)
        WHEN 'INN' THEN split_part(adres.adres_opisowy, ', tel.' , 1)
    END

FROM
    organizacja, adres
WHERE
    organizacja.id = adres.id
ORDER BY
    organizacja.nazwa_organiz
[/code]

Mam PostgreSQL 8.3, nie może to być funkcja...

Z racji niewielkiego doświadczenia nie mam nawet pojęcia w którym kierunku kombinować :/]]></content>
			<author>
				<name><![CDATA[grzechu]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=963</uri>
			</author>
			<updated>2015-01-06T19:22:32Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=5406#p5406</id>
		</entry>
</feed>
