So ersetzen Sie die Nullen mit Nullen in postgresql Kreuztabellen
Habe ich eine Produkt-Tabelle mit produkt_id und 100+ Attribute. Die product_id ist der text in der Erwägung, dass die Attribut-Spalten sind integer, also 1, wenn das Attribut vorhanden ist. Wenn der Postgresql Kreuztabelle ist auszuführen, bei nicht übereinstimmenden atrributes Rückgabe von null-Werten. Wie Ersetze ich die null-Werte mit Nullen statt.
SELECT ct.*
INTO ct3
FROM crosstab(
'SELECT account_number, attr_name, sub FROM products ORDER BY 1,2',
'SELECT DISTINCT attr_name FROM attr_names ORDER BY 1')
AS ct(
account_number text,
Attr1 integer,
Attr2 integer,
Attr3 integer,
Attr4 integer,
...
)
Ersetzen dieses Ergebnis:
account_number Attr1 Attr2 Attr3 Attr4
1.00000001 1 null null null
1.00000002 null null 1 null
1.00000003 null null 1 null
1.00000004 1 null null null
1.00000005 1 null null null
1.00000006 null null null 1
1.00000007 1 null null null
mit unter:
account_number Attr1 Attr2 Attr3 Attr4
1.00000001 1 0 0 0
1.00000002 0 0 1 0
1.00000003 0 0 1 0
1.00000004 1 0 0 0
1.00000005 1 0 0 0
1.00000006 0 0 0 1
1.00000007 1 0 0 0
Workaround wäre eine select account_number, coalesce(Attr1,0)... auf das Ergebnis. Aber die Eingabe, verschmelzen Sie für jede der 100+ Spalten ist eher unyieldly. Gibt es eine Möglichkeit, dies zu behandeln mit der Kreuztabelle? Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie verschmelzen:
wenn man diese Attrs in einer Tabelle wie
attr
Attr1
Attr2
Attr3
...
dann könnte man automatisch die Wiederholung coalesce-Anweisung wie
SELECT 'coalesce("' || attr || '", 0) "'|| attr ||'",' from table;
um sich Tipparbeit ersparen.