複数の列でクロス集計クエリを作成しようとしています。
それを達成するために、私は最初にタイプを作成しました:
create type product_status as (product varchar(255), status varchar(255))
次に、クエリを作成しました。
select pivot.*
from crosstab(
$$
select
uniqueid,
(product, status)::product_status,
count(*)
from policycase
inner join policy
on policy.id = policycase.selected_id
group by 1,2
order by 1,2
$$,
$$
values(
-- ('(HOUSEFIRE,HISTORICAL)'::product_status),
-- ('(HOUSECONTENT,HISTORICAL)'::product_status),
('(LIABILITY,ARCHIVED)'::product_status)
)
$$
) as pivot (
uniqueid bigint,
-- housefire_hist smallint,
-- housecontent_hist smallint,
liability_Arch smallint
)
これは機能し、正しい結果が返されます。ただし、上記の例のコメント行をコメント解除すると、次のエラーメッセージが表示されます。
[例外、エラーコード0、SQLState 42601]エラー:提供された「カテゴリ」SQLは、少なくとも1行1列1列の1列を返す必要があります
2つのテーブルが使用されます。
Policycaseには、id、selected_id、およびstatusがあります。
ポリシーにはid、uniqueid、productがあります
ここでのvalues
句:
values(
('(HOUSEFIRE,HISTORICAL)'::product_status),
('(HOUSECONTENT,HISTORICAL)'::product_status),
('(LIABILITY,ARCHIVED)'::product_status)
)
次のように、3列の1行を生成しますが、1列の3行が必要です。
values ('(HOUSEFIRE,HISTORICAL)'::product_status),
('(HOUSECONTENT,HISTORICAL)'::product_status),
('(LIABILITY,ARCHIVED)'::product_status)