Probleme bei SQL-Abfrage (Case when und UNION ALL) / Tabellen Transponieren?

Hallo zusammen,

kann mir jemand bei folgendem Problem helfen?

Es geht darum, dass ich eine SQL-Abfrage für eine Excel-Datei machen soll.
Die Daten liegen in mehreren Tabellen vor, bzw. ich versuche sie wie folgt abzufragen / mit UNION ALL dann in eine lange Tabelle zusammenfasse:

(select 
	id,
	typid,
	Datatype,
	floatvalue,
	stringvalue
-- 	case when datatype = 5 then
-- 		stringvalue
-- 	else
-- 		floatvalue
--  	end
from
	Tab1
where typid=3
order by id)

union all
(select 
	id,
	typid,
	Datatype,
	floatvalue,
	stringvalue
-- 	case when datatype = 5 then
-- 		stringvalue
-- 	else
-- 		floatvalue
--  	end
from
	Tab2
where typid=3
order by id)

Meine konkreten Probleme:

  1. Das Datenmodell ist so angelegt, dass manche Werte Zeichenfolgen und andere Zahlen sind.
    In dem jeweiligen Fall handelt es sich dann oft um einen floatvalue aber gelegentlich auch um einen stringvalue.
    Ich möchte die Abfrage so auslegen, dass entsprechend dann das jew. Attribute gewählt wird.
    Als Anhaltspunkt habe ich die Spalte Datatype. Leider funktioniert die o.g. Case Answeisung mit String und integer nicht (es kommt eine Meldung, dass die drei Variablen inkompatibel sind).
    Zum testen habe ich danne infach mal zwischen typid und id gewechselt, was wunderbar funktiniert.
    Kann mir jemand einen Tipp geben wie ich am besten vorhgehe?
    Das hier soll den Datensatz darstellen.:
    1 " " 1
    2 " " 2
    3 A " "
    4 " " 3
    5 " " 4


    Herausbekommen sollte:
    1
    2
    A
    3
    4

Ich bekomme aber heraus (je nachdem wo ich das Select setzte):
1
2
" "
3
4


2) Wenn das obige Problem gelöst ist soll das Ergebnis in eine Excel-Datei eingebaut werden, deren Daten zeilenweise aufgebaut ist.
Das heißt die o.g. Datensätze sollen Spalte für Spalte in die Excel-Datei eingefügt werden.
Wobei jede Spalte eine Typen-ID hat, welche entsprechend fortlaufend ist.
Bisher sehe ich nur die Möglichkeit durch einzelne Abfragen über ein VBA Makro die Spalten zu füllen.
Denn wenn ich die SQL Abfrage dynamisch halten möchte müsste ich die Tabelle transponieren, jedoch weiß ich nicht ob / wie das mit PostreSQL geht…
Daher die Frage:
Wie würdet ihr vorgehen? Die Abfrage soll o.g. Spalte für Spalte durchführen oder alles in einer Abfrage erledigen und dafür dann irgendwie die Tabelle Transponieren damit die Daten in die Excel-Datei passt.
Man könnte natürlich auch die Excel-Datei umstellen, jedoch wären das sehr viele Formeln, die angefasst werden müssten…

Vielen Dank noch mal.
Hoffe ich konnte mein Problem verständlich schildern.

Gruß
Andreas

Problem 1: Du kannst casten, das geht in PostgreSQL einfach durch anhängen des Zieltypes: ::typ, also z.B.:

test=*# select 1.234;
 ?column? 
----------
    1.234
(1 Zeile)

test=*# select 1.234::text;
 text  
-------
 1.234
(1 Zeile)

Problem 2: https://www.pg-forum.de/viewtopic.php?f=66&t=4067

Danke für deine Antwort :slight_smile:
Das mit dem Transponieren lasse ich aber vorerst lieber :slight_smile: