如何在同一行而不是多行中将sql导入到pring(数据库是db2)

ny6fqffe  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(138)

我有2个表需要从中选择数据。
表1:
| 识别码|姓名|
| - -|- -|
| 一个|若翰|
| 2个|标记|
| 三个|安娜|
表2:
| 人员标识|类型|年份|
| - -|- -|- -|
| 一个|出生的|小行星1920|
| 一个|有刻度的|小行星1950|
| 一个|已死亡|二○ ○ ○年|
| 2个|出生的|小行星1940|
| 2个|有刻度的|小行星1960|
| 2个|已死亡|二〇一一年|
我想编写一个查询,将它们全部放在同一行中,如下所示:
| 标识符|姓名|出生的|grad|已死亡|
| - -|- -|- -|- -|- -|
| 一个|若翰|小行星1920|小行星1950|二○ ○ ○年|
我试探着:

SELECT
    t1.id AS id, t1.name AS name, 
    CASE WHEN t2.type = 'born' THEN t2.year END AS born,
    CASE WHEN t2.type = 'graduated' THEN t2.year END AS grad,
    CASE WHEN t2.type = 'died' THEN t2.year END AS died
FROM
    table1 t1 
INNER JOIN 
    table2 t2 ON t1.id = t2.Person_ID
WHERE
    t1.id = 1 
GROUP BY
    t1.id, t1.name, t2.type, t2.year

这就是我现在得到的结果:
| 标识符|姓名|出生的|grad|已死亡|
| - -|- -|- -|- -|- -|
| 一个|若翰|小行星1920|零值|零值|
| 一个|若翰|零值|小行星1950|零值|
| 一个|若翰|零值|零值|二○ ○ ○年|

68de4m5k

68de4m5k1#

使用枢纽分析逻辑:

SELECT
    t1.ID,
    t1.name,
    MAX(CASE WHEN t2.type = 'born'      THEN t2.year END) AS born,
    MAX(CASE WHEN t2.type = 'graduated' THEN t2.year END) AS grad,
    MAX(CASE WHEN t2.type = 'died'      THEN t2.year END) AS died
FROM table1 t1
INNER JOIN table2 t2
    ON t2.Person_ID = t1.ID
GROUP BY
    t1.ID,
    t1.name
ORDER BY
    t1.ID;

相关问题