不确定是否有人可以回答这个问题,但是有一个问题,我不知道我需要的确切列数,因为要旋转的行数可能会有所不同。可以将其视为具有8个类别的许多产品,但有时它可以包含7个类别或更少的7个类别。
有没有一种方法可以根据行数动态创建更多或更少的列?
这是我的查询:
select * from crosstab('select dense_rank() OVER (ORDER BY e.id, e.description)::int AS row_name, e.id as experiment_id,
e.question, e.description, e.status, e.owner_site, e.study_id, t.taxonomy_id as category, json_build_object(v.vocabulary, t.taxonomy_name) AS value from experiment e
LEFT JOIN taxonomy_to_experiment tte ON e.id = tte.experiment_id LEFT JOIN taxonomy t ON tte.taxonomy_id = t.taxonomy_id
LEFT JOIN vocabulary v ON t.vocabulary_id = v.vocabulary_id WHERE e.properties->>''path''=''antibody/actin-muscle'' ORDER BY e.id, e.description',
'SELECT DISTINCT taxonomy_id from taxonomy_to_experiment tte LEFT JOIN experiment e ON tte.experiment_id = e.id where e.properties @> ''{"path": "antibody/actin-muscle"}''')
AS final_result(rowname bigint, experiment_id bigint, title text, body text, teaser text, external_references text, study_id bigint, taxonomy_id1 text, taxonomy_id2 text, taxonomy_id3 text, taxonomy_id4 text, taxonomy_id5 text, taxonomy_id6 text, taxonomy_id7 text, taxonomy_id8 text);
因此,基本上在最后,如果产品不同并且具有更多类别,我将不得不再添加一列taxonomy_id9文本。如果它有7,我将不得不删除我手动添加的最后一列。有人知道这是否有可能吗?
我将采用其他方法,而不仅仅是交叉表。