如何将列的行值转换为列-jdbctemplate和postgresql

wz3gfoph  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(253)

我现在有一张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

我想稍后查询和获取数据并与多个表进行联接,因此我需要:

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

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

mm5n2pyu

mm5n2pyu1#

当前表是一个典型的非规范化键值存储。您可以通过聚合生成所需的标准化输出 id 然后用max 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部分,您可能需要使用本机查询来执行上述操作。

相关问题