<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Forum PostgreSQL - Tabela przestawna??]]></title>
	<link rel="self" href="http://forum.postgresql.org.pl/extern.php?action=feed&amp;tid=1187&amp;type=atom"/>
	<updated>2011-12-21T09:31:19Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.postgresql.org.pl/viewtopic.php?id=1187</id>
		<entry>
			<title type="html"><![CDATA[Odp: Tabela przestawna??]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=3329#p3329"/>
			<content type="html"><![CDATA[Może coś takiego:

[code]Create Table Raport (
    id integer,
    typ_zlecenia text,
    data_wykonania date,
    kierunek_sn integer
);

Insert Into Raport Values (35240, 'SERWIS', '2011-12-13', 6082);
Insert Into Raport Values (35240, 'SERWIS', '2011-12-13', 6083);

Select
    id As "ID",
    typ_zlecenia As "TYP ZLECENIA",
    data_wykonania As "DATA WYKONANIA",
    min(kierunek_sn) As "KIERUNKE S/N",
    Case When min(kierunek_sn) <> max(kierunek_sn) Then max(kierunek_sn) Else Null End As "KIERUNKE S/N"
From Raport
Group by id, typ_zlecenia, data_wykonania;
  ID   | TYP ZLECENIA | DATA WYKONANIA | KIERUNKE S/N | KIERUNKE S/N 
-------+--------------+----------------+--------------+--------------
 35240 | SERWIS       | 2011-12-13     |         6082 |         6083
(1 row)[/code]

Założenia są takie, że zawsze będą dwie kolumny KIERUNKE S/N, jeżeli wartości są identyczne, to w drugiej jest umieszczany Null, grupowanie idzie po trzech pierwszych kolumnach. Jeżeli kolumn ma być więcej tj. poniższe zapytanie zwraca wartość > 2:

[code]Select max(count) From (Select count(kierunek_sn) from Raport Group by id, typ_zlecenia, data_wykonania) s;[/code]

to sytucja się znacząco komplikuje, myślę, że możnaby kombinować z użyciem modułu tablefunc ([url]http://www.postgresql.org/docs/current/static/tablefunc.html[/url]), a w szczególności funkcją crosstab.]]></content>
			<author>
				<name><![CDATA[gszpetkowski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1223</uri>
			</author>
			<updated>2011-12-21T09:31:19Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=3329#p3329</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Tabela przestawna??]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=3328#p3328"/>
			<content type="html"><![CDATA[Raport wygląda mniej więcej tak:
ID          	TYP ZLECENIA	DATA WYKONANIA 	KIERUNEK S/N 
35240	SERWIS	        2011-12-13	           +            6082
35240	SERWIS	        2011-12-13	           -             6083

Jak zmodyfikować zapytanie aby wyglądało tak:
ID          	TYP ZLECENIA	DATA WYKONANIA 	KIERUNEK S/N    KIERUNEK S/N 
35240	SERWIS	        2011-12-13	           +            6082   -              6083

kluczem jest ID. chodzi o to aby w jednym wierszu była informacja o odebranym urządzeniu i zainstalowanym urządzeniu.]]></content>
			<author>
				<name><![CDATA[lukaszp]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1315</uri>
			</author>
			<updated>2011-12-20T21:31:43Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=3328#p3328</id>
		</entry>
</feed>
