【发布时间】:2017-12-19 16:51:13
【问题描述】:
这一切都在标题中。文档有这样的内容:
SELECT *
FROM crosstab('...') AS ct(row_name text, category_1 text, category_2 text);
我有两张桌子,lab_tests 和 lab_tests_results。所有lab_tests_results 行都与lab_tests 表中的主键ID 整数相关联。我正在尝试制作一个数据透视表,其中实验室测试(由整数标识)是行标题,并且相应的结果在表中。我无法绕过整数或整数周围的语法错误。
目前的设置是否可行?我在文档中遗漏了什么吗?还是我需要执行各种内部连接来制作类别字符串?或者修改lab_tests_results 表以使用文本标识符进行实验室测试?
谢谢大家的帮助。非常感谢。
编辑:在 Dmitry 的帮助下弄明白了。他已经弄清楚了数据布局,但我不清楚我需要什么样的输出。我试图让数据透视表基于 lab_tests_results 表中的 batch_id 数字。必须敲定基本查询和转换数据类型。
SELECT *
FROM crosstab('SELECT lab_tests_results.batch_id, lab_tests.test_name, lab_tests_results.test_result::FLOAT
FROM lab_tests_results, lab_tests
WHERE lab_tests.id=lab_tests_results.lab_test AND (lab_tests.test_name LIKE ''Test Name 1'' OR lab_tests.test_name LIKE ''Test Name 2'')
ORDER BY 1,2'
) AS final_result(batch_id VARCHAR, test_name_1 FLOAT, test_name_2 FLOAT);
这提供了来自 lab_tests_results 表的数据透视表,如下所示:
batch_id |test_name_1 |test_name_2
---------------------------------------
batch1 | result1 | <null>
batch2 | result2 | result3
【问题讨论】:
标签: postgresql pivot-table crosstab