<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Forum PostgreSQL - łączenie wierszy]]></title>
	<link rel="self" href="http://forum.postgresql.org.pl/extern.php?action=feed&amp;tid=463&amp;type=atom"/>
	<updated>2010-07-17T05:53:18Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.postgresql.org.pl/viewtopic.php?id=463</id>
		<entry>
			<title type="html"><![CDATA[Odp: łączenie wierszy]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=2139#p2139"/>
			<content type="html"><![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'.]]></content>
			<author>
				<name><![CDATA[rski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=26</uri>
			</author>
			<updated>2010-07-17T05:53:18Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=2139#p2139</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: łączenie wierszy]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=2137#p2137"/>
			<content type="html"><![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]]></content>
			<author>
				<name><![CDATA[yarkomat]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1131</uri>
			</author>
			<updated>2010-07-16T20:08:04Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=2137#p2137</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: łączenie wierszy]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=2133#p2133"/>
			<content type="html"><![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]]]></content>
			<author>
				<name><![CDATA[rski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=26</uri>
			</author>
			<updated>2010-07-15T17:41:58Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=2133#p2133</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[łączenie wierszy]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=2130#p2130"/>
			<content type="html"><![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]]></content>
			<author>
				<name><![CDATA[yarkomat]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1131</uri>
			</author>
			<updated>2010-07-12T22:45:28Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=2130#p2130</id>
		</entry>
</feed>
