如何将列的行值转换为列 - JDBCTemplate 和 PostgreSQL

How to convert row values of a column to columns - JDBCTemplate and PostgreSQL

我目前有一个 table:

id | info  | value       | date 
1  | desc  | description | 19-01-1990 10:01:23
2  | lname | Doe         | 19-11-1990 10:01:23
1  | fname | John        | 19-08-1990 10:01:23
1  | dob   | dob         | 19-05-1990 10:01:23
3  | fname | Jo          | 19-01-1990 10:01:23

我想查询和抓取数据并稍后与多个 table 进行连接,所以我需要它:

id | desc        | lname | fname | dob | desc        | date        | ... |
1  | description | Doe   | John  | dob | description | 19-01-1990 10:01:23 | ... |
2  | .........   | ..... | Jo    |     |             | ...         | ... |

我试过交叉表,但似乎不起作用。感谢任何帮助

您当前的 table 是典型的非规范化键值存储。您可以通过 id 聚合然后使用最大 CASE 表达式来生成您想要的规范化输出:

SELECT
    id,
    MAX(CASE WHEN info = 'desc'  THEN value END) AS desc,
    MAX(CASE WHEN info = 'lname' THEN value END) AS lname,
    MAX(CASE WHEN info = 'fname' THEN value END) AS fname,
    MAX(CASE WHEN info = 'dob'   THEN value END) AS dob
FROM yourTable
GROUP BY
    id
ORDER BY
    id;

请注意,我没有任何日期列,因为您没有给出 每个 id 应保留哪个 日期值的逻辑。

至于您问题的 Spring 部分,您可能必须使用本机查询来执行上述内容。