<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Forum PostgreSQL - łączenie wierszy]]></title>
		<link>https://forum.postgresql.org.pl/viewtopic.php?id=463</link>
		<description><![CDATA[Najświeższe odpowiedzi w łączenie wierszy.]]></description>
		<lastBuildDate>Sat, 17 Jul 2010 05:53:18 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Odp: łączenie wierszy]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=2139#p2139</link>
			<description><![CDATA[No to musisz sprecyzować kiedy mają się łączyć opisy, myślałem że dla identycznych id_produktu.
Wszystko prawdopodobnie sprowadzi się do tego aby odpowiednio dodać warunek do 'zapytania z potworka'.]]></description>
			<author><![CDATA[dummy@example.com (rski)]]></author>
			<pubDate>Sat, 17 Jul 2010 05:53:18 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=2139#p2139</guid>
		</item>
		<item>
			<title><![CDATA[Odp: łączenie wierszy]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=2137#p2137</link>
			<description><![CDATA[ver. niestety 8.2
dzieki za podpowiedź ale niestety przy uzyciu "potworka" rekordy wyświetlily sie w dwoch wierszach dla identycznych id_produktu, nie polaczyly sie w kolumnie opis gdy id_produktu jest rozne.
Czy w takim przypadku jest to mozliwe?
Kolego masz może jakes inne rozwiazanie?
oczywiscie dodalem

array_to_string(array(select opis from opisy o2 where o2.id_produktu=o.id_produktu),'-') as opisy

jeszcze raz wielkie dzieki za pomysl. Bede cos jeszcze myslal ale sprawa watpliwa abym rozwiazal
pozdrawiam bardzo serdecznie]]></description>
			<author><![CDATA[dummy@example.com (yarkomat)]]></author>
			<pubDate>Fri, 16 Jul 2010 20:08:04 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=2137#p2137</guid>
		</item>
		<item>
			<title><![CDATA[Odp: łączenie wierszy]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=2133#p2133</link>
			<description><![CDATA[W sumie nie wiem dokładnie co ma robić to zapytanie, ale żeby połączyć opisy dla tych samych id używasz zapytanie zagnieżdżonego z array_to_string(array(...))
[code]
select distinct
        p.id_produktu
        p.id_zamowienia
        p.nazwa
        p.cena
        p.stan
        count(*) as "Ilość pozycji",
        max(p.data_dot) as ostatnia_data_dodania,
        array_to_string(array(select opis from opisy o2 where o2.id_produktu=o.id_produktu),'-') opisy
from    produkty p,
        opisy o

where p.id_produktu=o.id_produktu
and p.data_dot between '2010-03-01' and '2010-06-30 23:59:59'

group by 1,2,3,4,5,8
having month(max(p.data_dot))=3
order by 3,4

[/code]

a jak masz nowszego postgresa, >=8.4 to możesz zamiast tego potworka array_to_string(array(...)) użyć po prostu 

[code]
array_to_string(array_agg(o.opis),' - '))
[/code]]]></description>
			<author><![CDATA[dummy@example.com (rski)]]></author>
			<pubDate>Thu, 15 Jul 2010 17:41:58 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=2133#p2133</guid>
		</item>
		<item>
			<title><![CDATA[łączenie wierszy]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=2130#p2130</link>
			<description><![CDATA[Witam,
Chciałbym zrobić coś takiego, aby w jednej kolumnie zlaczyc z tabeli OPISY wszystkie opisy, ktore pasuja do produktu (danego id_produktu) z zalozeniem, ze w ciagu ostatnich 3-miesiecy nie bylo dla nich zamowien.


Schemat tabel

TAB produkty
id_produktu [integer]
id_zamowienia [integer]
nazwa
cena
stan
data_dot

TAB opisy
id_opisu [integer]
id_produktu [integer]
id_zamowienia [integer]
opis

jak narazie mam cos takiego:

select  
        p.id_produktu
        p.id_zamowienia
        p.nazwa
        p.cena
        p.stan
        count(*) as "Ilość pozycji",
        max(p.data_dot) as ostatnia_data_dodania,
        o.opis
                         
from    produkty p,
        opisy o 

where p.id_produktu=o.id_produktu
and p.data_dot between '2010-03-01' and '2010-06-30 23:59:59'

group by 1,2,3,4,5,8
having month(max(p.data_dot))=3
order by 3,4


podsumowujac chodzi mi o taki wynik
np.
1, 1, koc miekki, 23.60, 12, 2, 2010-03-05, lekki - bardzo lekki

a teraz mam
1, 1, koc miekki, 23.60, 12, 2, 2010-03-05, lekki 
1, 1, koc miekki, 23.60, 12, 2, 2010-03-05, bardzo lekki 
jak zamiast 
max(p.data_dot) dam tak p.data_dot
natomiast max(p.data_dot) bedzie pokazywal tylko ostatni wpis czyli bardzo lekki
jak to polaczyc
lekki - bardzo lekki

prosze o pomoc zabrakło juz mi koncepcji 
pozdrawiam]]></description>
			<author><![CDATA[dummy@example.com (yarkomat)]]></author>
			<pubDate>Mon, 12 Jul 2010 22:45:28 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=2130#p2130</guid>
		</item>
	</channel>
</rss>
