Wie wird denn auf die Daten zugegriffen?
Denn du könntest dir ein
Package schrieben, welches sich passend zu einer ID ein
SQL mit Spalten für alle ID2s baut.
Ist jetzt als Trockenübung aus den Fingern gesaugt, also Nachsicht büddeshön!
SQL-Code:
create package CrosstabThingy authid
current_user as
function GetCrossTabFor(valueID
in Integer)
return sys_refcursor;
end;
create package body CrosstabThingy
as
function GetCrossTabFor(valueID
in Integer)
return sys_refcursor
is
result sys_refcursor;
sqlStatement clob;
valueIndex
Integer := 0;
begin
sqlStatement := '
SELECT Zeit';
for childID
in (
select ID2
from mytable
where ID1 = valueID) loop
valueIndex := valueIndex + 1;
sqlStatement := sqlStatement ||
'
,(SELECT Messwert from mytable where ID2 = '||
childID.ID2||'
) as Value'||to_Char(valueIndex, '
tm00');
end loop;
sqlStatement := sqlStatement || '
from myTable where ID1 = :id';
open result
for to_Char(sqlStatement)
using valueID;
return result;
end;
end;
Per
ODBC würde das so ausgeführt werden können:
{call CrosstabThingy.GetCrossTabFor(5000)}
Je nachdem wie du drauf zugreifst ginge auch sowas:
SQL-Code:
select Zeit,
cursor(select ID2, Messwert
from mytable
where ID1 = t.ID1) Values
from mytable t
where ...
Oracle hat auch eine Menge
XML Funktionen parat, mussu nur sagen wofür das nachher benutzt werden soll.