Kann ich Nullen in einem PIVOT durch Nullen ersetzen?

7

Ich verwende die PIVOT-Funktion in Oracle und bin gespannt, ob ich die Nullwerte durch Nullen ersetzen kann. Ich weiß, dass ich die gesamte Abfrage in ein anderes SELECT einbinden und dann COALESCE für die Werte verwenden kann, aber ich bin gespannt, ob es eine Verknüpfung gibt.

JHFB
quelle
1
NVL(column_name,0)?
Philᵀᴹ
1
In der PIVOT-Funktion gibt es per se keinen "Spalten" -Namen. Dies funktioniert, wenn ich die gesamte Abfrage einbinde. Ich frage mich, ob es eine Alternative gibt.
JHFB

Antworten:

8

Wenn Sie die folgende Datentabelle haben, die Sie schwenken möchten:

CREATE TABLE yourtable (id int, name varchar2(1), value varchar(10));

INSERT ALL 
    INTO yourtable (id, name, value )
         VALUES (1, 'A', '1500')
    INTO yourtable (id, name, value )
         VALUES (1, 'B', '4500')
    INTO yourtable (id, name, value )
         VALUES (2, 'C', '3.5')
    INTO yourtable (id, name, value )
         VALUES (3, 'B', 'test')
    INTO yourtable (id, name, value )
         VALUES (4, 'A', 'blah')
    INTO yourtable (id, name, value )
         VALUES (4, 'C', 'hello')
SELECT * FROM dual;

Und Ihr aktueller Code ähnelt:

select id, OptionA, OptionB, OptionC
from
(
  select id, name, value
  from yourtable
) src
pivot
(
  max(value)
  for name in ('A' as OptionA, 'B' OptionB, 'C' OptionC)
) piv

Siehe SQL Fiddle mit Demo . Die Beispieldaten erzeugen nullWerte.

Wenn Sie die nullWerte ersetzen möchten, müssen Sie dies in der endgültigen SELECTListe tun . Ihr Code muss also sein:

select id, 
  coalesce(OptionA, '0') OptionA, 
  coalesce(OptionB, '0') OptionB, 
  coalesce(OptionC, '0') OptionC
from
(
  select id, name, value
  from yourtable
)
pivot
(
  max(value)
  for name in ('A' as OptionA, 'B' as OptionB, 'C' as OptionC)
);

Siehe SQL Fiddle mit Demo

Taryn
quelle
1
Sie verpacken also die Pivot-Abfrage und verwenden die Koaleszenz, wie sie vom OP in der Frage beschrieben wird. Vielleicht möchten Sie auch den zweiten Teil ansprechen - dh "... neugierig, ob es eine Abkürzung gibt."
Maxschlepzig