angenommen, Deine Tabelle Auto hat noch eine Primary Key Spalte ‚ID‘,
dann könntest Du wie folgt abfragen:
SELECT a1.kennzeichen
, (SELECT ‚x‘ FROM auto a2 WHERE a2.schaden = ‚Tür‘ a2.ID = a1.ID) AS ‚Tür‘
, (SELECT ‚x‘ FROM auto a2 WHERE a2.schaden = ‚Spiegel‘ a2.ID = a1.ID) AS ‚Spiegel‘
, ‚und so weiter‘
FROM auto a1;
Die Menge der Spalten, die Du selektierst, ist nicht dynamisch. D.H. kommt eine
neue Schadensart hinzu (‚Batterie‘, o.ä.), musst Du Deine Abfrage ergänzen.
Um eine dynamische Abfrage zu generieren, könntest Du mit PLSQL oder mit einer
Progrmmiersprache, die eine JDBC-Verbindung aufbaut, eine Lösung suchen.
Das folgende Statement ermittelt alle untersichtlichen Schadensarten:
SELECT DISTINCT(schaden) FROM auto;
Besser wäre es jedoch, für die unterschiedlichen Arten eine eigene Tabelle anzulegen.
ich nehme an, es geht darum, das Abfrageergebnis mit einem einzelnen SELECT zu erstellen.
Das wird so nicht funktionieren, da offenbar die möglichen Schaden-Einträge variabel sind und nicht auf die drei Beispiele begrenzt.
Ohne etwas Programmcode wird es nicht gehen.
Gruß
Erhard
Hallo zusammen,
ich will aus einer Oracle DB Daten abfragen und
zusammengefasst ausgeben.
ein kleine Bsp.:
Tabelle Auto
Kennzeichen Schaden
xx-121 Tür
xx-121 Spiegel
xx-365 Motor
from (select kennzeichen, case when schaden = ‚Tür‘ then 1 else 0 end as tür, case when schaden = ‚Motor‘ then 1 else 0 end as motor, case when schaden = ‚Spiegel‘ then 1 else 0 end as spiegel from auto
)
group by kennzeichen
Anmerkungen:
Eingeschränkte Werte, was die Case-Funktion anbetrifft
1 und 0 in der Case-Funktion dienen der Summierung, werden hinterher per Decode umgesetzt, sobald ein Kennzeichen einen Schaden doppelt hinterlegt hat, wird der nicht mehr angezeigt (da Wert=2). Kann aber per Unique Index auf Tabelle AUTO abgefangen werden.
Ich hoffe, geholfen zu haben, bei weiteren Fragen nur zu.
Hallo,
hab mal was probiert - ist zwar nicht so elegant,
funktioniert aber…
-------- SCHNIPP ------
set serveroutput on
declare
v_ausgabe0 varchar2(100) := ’ ‚;
v_ausgabe1 varchar2(100) := ’ X‘;
v_ausgabe varchar2(100);
v_nr varchar2(10) := ‚-‘;
v_count pls_integer := 0;
begin
dbms_output.put_line(‚NR TÜR SPIEGEL‘);
for rec in (select distinct Kennzeichen from Auto order by Kennzeichen)
loop
v_ausgabe := null;
v_count := 0;
for rec1 in (select * from Auto where Kennzeichen = rec.Kennzeichen)
loop
v_count := v_count +1;
if rec1.Schaden = ‚TÜR‘ then
v_ausgabe := v_ausgabe||v_ausgabe1;
elsif rec1.Schaden = ‚SPIEGEL‘ then
if v_count = 1 then
v_ausgabe := v_ausgabe||v_ausgabe0||v_ausgabe1;
else
v_ausgabe := v_ausgabe||v_ausgabe1;
end if;
end if;
end loop;
dbms_output.put_line(rec.Kennzeichen||’ '||v_ausgabe);