Как заменить нули нулями в кросс-таблицах postgresql

У меня есть таблица товаров с product_id и 100+ атрибутами. product_id - это текст, тогда как столбцы атрибутов являются целыми числами, т.е. 1, если атрибут существует. При запуске кросс-таблицы Postgresql атрибуты несовпадающие возвращать нулевые значения. Как мне заменить нули на нули.

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,
...
)

Замените этот результат:

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

следующим:

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

Временным решением было бы выполнить select account_number, coalesce (Attr1,0) ... on результат. Но набирать coalesce для каждого из 100+ столбцов довольно неудобно. Есть ли способ справиться с этим с помощью кросс-таблицы? Спасибо

14
задан mu is too short 15 June 2011 в 15:40
поделиться