如果选择语句中的ID匹配则替换空信息

时间:2019-07-02 13:47:58

标签: sql oracle

我要从多个表中提取数据,并且有三个联合查询。我希望将不在一行中的信息填充到另一行中的信息中,同时仍保留一个单独的月份值列表。

每个ID有三行,基本上,我希望从具有匹配ID的行中复制不在行中的任何信息,但由于某些关键的每月数据,我仍然将三行分开每行分开。

Link shows what I want here

2 个答案:

答案 0 :(得分:0)

您可以使用分析功能:

select max(name) over (partition by id) as name,
       max(zip) over (partition by id) as zip,
       max(type1) over (partition by id) as type1,
       id, type, "201907", "201906", "201905"
from t;

答案 1 :(得分:0)

您可以使用以下查询:

SELECT
    T2.MAX_NAME,
    T2.MAX_ZIP,
    T2.MAX_TYPE,
    T1.ID,
    T1.TYP1,
    T1."201907",
    T1."201906",
    T1."201905"
FROM
    TAB T1
    JOIN (
        SELECT
            MAX(NAME) MAX_NAME,
            MAX(ZIP) MAX_ZIP,
            MAX(TYPE) MAX_TYPE,
            ID
        FROM
            TAB
        GROUP BY
            ID
    ) T2 ON ( T1.ID = T2.ID );

db<>fiddle demo