Zeilen als Spalte
am 07.11.2007 11:21:05 von Stephan Menzel
Hallo,
ich habe schon etwas gesucht, aber noch keine zufriedenstellende
Antwort gefunden, für mein Problem!
Ich habe 2 Tabellen:
Tabelle 1
id Wert
1 Param1
2 Wert2
3 Value3
4 Wert4
.. .
.. .
.. .
Tabelle 2
Idx Wert_id Eigenschaft
001 3 56
001 4 Text1
002 1 P
002 2 N
002 4 Text2
.. . .
.. . .
.. . .
und brauche jetzt eine Abfrage die mir das ganze so Ausgibt
Idx Param1 Wert2 Value3 Wert4 . .
..
001 NULL NULL 56 Text1
002 P N NULL Text2
.. . . . .
.. . . . .
.. . . . .
cu Stephan
Re: Zeilen als Spalte
am 07.11.2007 11:40:07 von Andreas Kretschmer
Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de
Re: Zeilen als Spalte
am 07.11.2007 11:45:47 von Claus Reibenstein
Stephan Menzel schrieb:
> und brauche jetzt eine Abfrage die mir das ganze so Ausgibt
>
> Idx Param1 Wert2 Value3 Wert4 . .
> ..
> 001 NULL NULL 56 Text1
> 002 P N NULL Text2
Was spricht gegen SELECT?
Gruß. Claus
Re: Zeilen als Spalte
am 07.11.2007 13:57:16 von Stephan Menzel
Hallo,
>Stephan Menzel schrieb:
>
>> und brauche jetzt eine Abfrage die mir das ganze so Ausgibt
>>
>> Idx Param1 Wert2 Value3 Wert4 . .
>> ..
>> 001 NULL NULL 56 Text1
>> 002 P N NULL Text2
>
>Was spricht gegen SELECT?
Wie "Was spricht gegen SELECT"?
wie geht das deiner Meinung nach, wenn es so einfach ist?
>
>Gruß. Claus
cu Stephan
Re: Zeilen als Spalte
am 07.11.2007 14:00:42 von Stephan Menzel
Hallo,
>> Hallo,
>>
>> ich habe schon etwas gesucht, aber noch keine zufriedenstellende
>> Antwort gefunden, für mein Problem!
>>
>> Ich habe 2 Tabellen:
>>
>> Tabelle 1
>>
>> id Wert
>> 1 Param1
>>
>> Tabelle 2
>>
>> Idx Wert_id Eigenschaft
>> 001 3 56
>>
>> und brauche jetzt eine Abfrage die mir das ganze so Ausgibt
>>
>> Idx Param1 Wert2 Value3 Wert4 . .
>> .
>> 001 NULL NULL 56 Text1
>> 002 P N NULL Text2
>
>Wird so in plain SQL ned gehen. Dazu ist ja erst einmal Tabelle 1
>auszuwerten, um die Struktur der Zieltabelle zu erhalten. Man könnte das
>aber in einer stored proc machen, mit dynamischen SQL-Anweisungen. Für
>PG könnt ich das basteln, wäre aber für Dich wertlos. Aber vielleicht
>reichen Dir ja schon meine Hinweise, damit Du es selbst hinbekommst.
>
Das wollte ich eigentlich vermeiden, da ich noch ein Access-Frontend
dran habe, das mit dynamischen SQL nicht umgehen kann,
weill's Access nicht kann!
Besser gesagt der ODBC-Treiber kanns nicht!
cu Stephan
Re: Zeilen als Spalte
am 07.11.2007 14:24:07 von Claus Reibenstein
Stephan Menzel schrieb:
>> Stephan Menzel schrieb:
>>
>>> und brauche jetzt eine Abfrage die mir das ganze so Ausgibt
>>>
>>> Idx Param1 Wert2 Value3 Wert4 . .
>>> ..
>>> 001 NULL NULL 56 Text1
>>> 002 P N NULL Text2
>>
>> Was spricht gegen SELECT?
>
> Wie "Was spricht gegen SELECT"?
> wie geht das deiner Meinung nach, wenn es so einfach ist?
SELECT t2.Idx AS Idx, t1.Param1 as Param1, t1.Wert2 as Wert2, ...
FROM Tabelle1 AS t1, Tabelle2 AS t2
WHERE t1.id = t2.Wert_id
Du hast nicht geschrieben, wie die Tabellen vernküpft sind. Die
WHERE-Klausel ist daher nur geraten.
Gruß. Claus
Re: Zeilen als Spalte
am 07.11.2007 14:30:49 von Andreas Kretschmer
Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de
Re: Zeilen als Spalte
am 07.11.2007 14:39:57 von Stephan Menzel
Hallo,
>Stephan Menzel schrieb:
>
>>> Stephan Menzel schrieb:
>>>
>>>> und brauche jetzt eine Abfrage die mir das ganze so Ausgibt
>>>>
>>>> Idx Param1 Wert2 Value3 Wert4 . .
>>>> ..
>>>> 001 NULL NULL 56 Text1
>>>> 002 P N NULL Text2
>>>
>>> Was spricht gegen SELECT?
>>
>> Wie "Was spricht gegen SELECT"?
>> wie geht das deiner Meinung nach, wenn es so einfach ist?
>
>SELECT t2.Idx AS Idx, t1.Param1 as Param1, t1.Wert2 as Wert2, ...
> FROM Tabelle1 AS t1, Tabelle2 AS t2
> WHERE t1.id = t2.Wert_id
ich weiss nicht ob ich einen Denkfehler habe, aber t1.Param1usw, gibt
es doch gar nicht als spalte, wenn der SELECT so aussieht, wäre t1.id
bzw t1.Wert möglich! Ich wüsste nicht das ich so auch den Feldinhalt
mit t1.Param1 referenzieren kann!
>
>Du hast nicht geschrieben, wie die Tabellen vernküpft sind. Die
>WHERE-Klausel ist daher nur geraten.
Wert_id in Tabelle 2 bezieht sich auf id in Tabelle 1!
>
>Gruß. Claus
cu Stephan
Re: Zeilen als Spalte
am 07.11.2007 14:45:23 von Stephan Menzel
Hallo,
>begin Stephan Menzel schrieb:
>>>Wird so in plain SQL ned gehen. Dazu ist ja erst einmal Tabelle 1
>>>auszuwerten, um die Struktur der Zieltabelle zu erhalten. Man könnte das
>>>aber in einer stored proc machen, mit dynamischen SQL-Anweisungen. Für
>>>PG könnt ich das basteln, wäre aber für Dich wertlos. Aber vielleicht
>>>reichen Dir ja schon meine Hinweise, damit Du es selbst hinbekommst.
>>>
>>
>>
>> Das wollte ich eigentlich vermeiden, da ich noch ein Access-Frontend
>> dran habe, das mit dynamischen SQL nicht umgehen kann,
>> weill's Access nicht kann!
>> Besser gesagt der ODBC-Treiber kanns nicht!
>
>Ich bin ja nun nicht so vertraut mit MySQL und Access verkleistert mit
>ODBC, nur wenn ich das unter PG als Funktion schreiben würde, dann wäre
>es eine sog. SRF (Set Returning Function), der Aufruf wäre dann in etwa
>so:
>
>select * from my_srf_function();
>
>und würde dann eine Tabelle liefern. Quasi sowas:
>
>test=# create or replace function my_srf_function(OUT id int, OUT val1
>text) returns setof record as $$declare i int;begin for i in 1..5 loop
>id:=i;val1:='foo'||i; return next; end loop; end; $$language plpgsql;
>CREATE FUNCTION
>test=*# select * from my_srf_function();
> id | val1
>----+------
> 1 | foo1
> 2 | foo2
> 3 | foo3
> 4 | foo4
> 5 | foo5
>(5 rows)
>
>
>Natürlich mit sinnvollerem Body der Funktion ;-), also auslesen der
>Struktur, basteln eines dynamischen Select-Befehles (basierend auf der
>ersten abelle, welche die Spalten liefert und der zweiten mit den
>Daten), und das mit EXECUTE ausführen.
>
>Mmh, natürlich weiß man erst mal nicht, welche Spalten im Resultat sein
>werden, das erschwert das Ganze etwas. Dann also vielleicht als Resultat
>nur Text ausgeben und die Spalten schon alle formatiert wie gewünscht
>ausgeben. Nicht trivial, aber machbar.
das muss ich mir mal durch den Kopf gehen llassen, und am wochenende
Probieren was da raus kommt, hab nicht mehr so viel Zeit heut!
Danke für die Hinweisse!
>
>
>end
>Andreas
cu Stephan
Re: Zeilen als Spalte
am 07.11.2007 17:30:01 von Claus Reibenstein
Stephan Menzel schrieb:
> Hallo,
>
>> Stephan Menzel schrieb:
>>
>> SELECT t2.Idx AS Idx, t1.Param1 as Param1, t1.Wert2 as Wert2, ...
>> FROM Tabelle1 AS t1, Tabelle2 AS t2
>> WHERE t1.id = t2.Wert_id
>
> ich weiss nicht ob ich einen Denkfehler habe, aber t1.Param1usw, gibt
> es doch gar nicht als spalte, wenn der SELECT so aussieht, wäre t1.id
> bzw t1.Wert möglich!
Du hast natürlich Recht. Ich hatte Deine Tabellenangaben falsch
interpretiert und dachte, dies wären die Spaltennamen. Asche auf mein Haupt.
Gut, dann wird die Sache natürlich etwas komplizierter. Da muss ich erst
mal ein bisschen nachdenken. Wenn ich was habe, melde ich mich nochmal.
>> Du hast nicht geschrieben, wie die Tabellen vernküpft sind. Die
>> WHERE-Klausel ist daher nur geraten.
>
> Wert_id in Tabelle 2 bezieht sich auf id in Tabelle 1!
Gut, dann habe ich wenigstens das richtig :-)
Gruß. Claus
Re: Zeilen als Spalte
am 07.11.2007 23:34:00 von Andreas Sakowski
"Stephan Menzel" schrieb
> Hallo,
>
> ich habe schon etwas gesucht, aber noch keine zufriedenstellende
> Antwort gefunden, für mein Problem!
>
> Ich habe 2 Tabellen:
>
> Tabelle 1
>
> id Wert
> 1 Param1
> 2 Wert2
> 3 Value3
> 4 Wert4
> . .
> . .
> . .
>
> Tabelle 2
>
> Idx Wert_id Eigenschaft
> 001 3 56
> 001 4 Text1
> 002 1 P
> 002 2 N
> 002 4 Text2
> . . .
> . . .
> . . .
>
> und brauche jetzt eine Abfrage die mir das ganze so Ausgibt
>
> Idx Param1 Wert2 Value3 Wert4 . .
> .
> 001 NULL NULL 56 Text1
> 002 P N NULL Text2
select
b.idx
, b1.eigenschaft
, b2.eigenschaft
, b3.eigenschaft
, b4.eigenschaft
from b
left join b b1 on b1.idx = b.idx and b1.wert_id = 1
left join b b2 on b2.idx = b.idx and b2.wert_id = 2
left join b b3 on b3.idx = b.idx and b3.wert_id = 3
left join b b4 on b4.idx = b.idx and b4.wert_id = 4
group by
b.idx
, b1.eigenschaft
, b2.eigenschaft
, b3.eigenschaft
, b4.eigenschaft
könnte das sein, was Du suchst.
Gruß
Andreas
Re: Zeilen als Spalte
am 09.11.2007 15:34:46 von petsch
On 7 Nov., 23:34, "Andreas Sakowski" wrote:
>
> select [...]
Die vom OP mehrmals eingefügten . . . . .
deuten darauf hin, dass es nicht bei vier Werten und somit Spalten
bleibten wird. Ich schließe mich daher der ersten Antwort von Andreas
Kretschmer an. "Wird so in plain SQL ned gehen."
Auch wenn ich es vielleicht etwas weniger schwäbisch formuliert
hätte. :-)
Peter
Re: Zeilen als Spalte
am 09.11.2007 21:00:51 von Stephan Menzel
On Fri, 09 Nov 2007 06:34:46 -0800, petsch
wrote:
>On 7 Nov., 23:34, "Andreas Sakowski" wrote:
>>
>> select [...]
>
>Die vom OP mehrmals eingefügten . . . . .
>
>deuten darauf hin, dass es nicht bei vier Werten und somit Spalten
>bleibten wird.
so ist es, es sollte Dynamisch sein!
> Ich schließe mich daher der ersten Antwort von Andreas
>Kretschmer an. "Wird so in plain SQL ned gehen."
>
>Auch wenn ich es vielleicht etwas weniger schwäbisch formuliert
>hätte. :-)
>
>Peter
cu Stephan
Re: Zeilen als Spalte
am 10.11.2007 12:31:08 von dnoeth
Stephan Menzel wrote:
> ich habe schon etwas gesucht, aber noch keine zufriedenstellende
> Antwort gefunden, für mein Problem!
Du suchst nach den falschen Begriffen:
"Entity-Attribute-Value" oder "One true lookup table"
ist das wonach du suchst :-)
Und danach wirst du dir hoffentlich ein sinnvolles Datenmodell überlegen.
Auch sehr schön:
http://www.simple-talk.com/opinion/opinion-pieces/bad-carma/
Dieter