PostgreSQL:如何组合多行?
发布时间:2020-12-13 16:32:50 所属栏目:百科 来源:网络整理
导读:我有一张这样的表来保存体检结果和发送报告的日期以及结果.实际上,发送的日期是基于clinic_visit日期.客户可以有一个或多个报告(日期可能会有所不同) ---------------------------------------| client_id | date_sent | result |--------------------------
我有一张这样的表来保存体检结果和发送报告的日期以及结果.实际上,发送的日期是基于clinic_visit日期.客户可以有一个或多个报告(日期可能会有所不同)
--------------------------------------- | client_id | date_sent | result | --------------------------------------- | 1 | 2001 | A | | 1 | 2002 | B | | 2 | 2002 | D | | 3 | 2001 | A | | 3 | 2003 | C | | 3 | 2005 | E | | 4 | 2002 | D | | 4 | 2004 | E | | 5 | 2004 | B | --------------------------------------- 我想从以上数据中提取以下报告. --------------------------------------------------- | client_id | result1 | result2 | resut3 | --------------------------------------------------- | 1 | A | B | | | 2 | D | | | | 3 | A | C | E | | 4 | D | E | | | 5 | B | | | --------------------------------------------------- 我正在处理Postgresql.因为“date_sent”对于每个客户端不一致,所以“交叉表”功能将不会工作. 任何人都可以提出一个粗略的想法应该如何查询?
我建议采用以下方法:
SELECT client_id,array_agg(result) AS results FROM labresults GROUP BY client_id; 它的输出格式并不完全相同,但它会给您相同的信息更快更干净. 如果您希望将结果放在单独的列中,您可以随时执行以下操作: SELECT client_id,results[1] AS result1,results[2] AS result2,results[3] AS result3 FROM ( SELECT client_id,array_agg(result) AS results FROM labresults GROUP BY client_id ) AS r ORDER BY client_id; 虽然这显然会引入一些硬编码的可能结果. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |