加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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;

虽然这显然会引入一些硬编码的可能结果.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读