Postgres SQL交叉表动态列数

时间:2018-08-10 20:14:44

标签: mysql sql database postgresql crosstab

不确定是否有人可以回答这个问题,但是有一个问题,我不知道我需要的确切列数,因为要旋转的行数可能会有所不同。可以将其视为具有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,我将不得不删除我手动添加的最后一列。有人知道这是否有可能吗?

我将采用其他方法,而不仅仅是交叉表。

0 个答案:

没有答案