如何将列的行值转换为列 - 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 部分,您可能必须使用本机查询来执行上述内容。
我目前有一个 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 部分,您可能必须使用本机查询来执行上述内容。