如果列基于键列包含值或空值,则SQL选择返回行

如果列基于键列包含值或空值,则SQL选择返回行,sql,hive,Sql,Hive,根据标题来描述我的需求有点困难,不过我会发布一个表格示例和结果预期 我有一张桌子(我们叫它TBL_K),看起来像这样: KEY1 KEY2 VALUE1 VALUE2 abc 123 NULL NULL abc 123 9999 1111 abc 123 9999 1111 ghd 123 NULL NULL ghd 123 NULL NULL tiy

根据标题来描述我的需求有点困难,不过我会发布一个表格示例和结果预期

我有一张桌子(我们叫它TBL_K),看起来像这样:

KEY1    KEY2    VALUE1   VALUE2
abc     123     NULL     NULL
abc     123     9999     1111
abc     123     9999     1111
ghd     123     NULL     NULL
ghd     123     NULL     NULL
tiy     134     4444     NULL
tiy     134     4444     NULL
hhh     981     NULL     NULL
我希望Select语句以以下格式返回结果:

KEY1    KEY2    VALUE1   VALUE2
abc     123     9999     1111
ghd     123     NULL     NULL
tiy     134     4444     NULL
hhh     981     NULL     NULL

我提出了自己的解决方案,创建了两个具有左外部联接的子表,但我想看看是否有其他方法可以创建此结果。

似乎几乎使用了
max()

SELECT
    A.KEY1,
    A.KEY2,
    B.VALUE1,
    B.VALUE2
FROM
    (
        SELECT
            Z.KEY1,
            Z.KEY2,
            TRIM(Z.VALUE1) VALUE1,
            TRIM(Z.VALUE2) VALUE2
        FROM
            TBL_K Z
        WHERE
            TRIM(Z.VALUE1) IS NULL
        GROUP BY
            Z.KEY1,
            Z.KEY2,
            Z.VALUE1,Z.VALUE2) A LEFT OUTER JOIN 
    (
        SELECT
            Y.KEY1,
            Y.KEY2,
            TRIM(Y.VALUE1) VALUE1,
            TRIM(Y.VALUE2) VALUE2
        FROM
            TBL_K Y
        WHERE
            TRIM(Y.VALUE1) IS NOT NULL
        GROUP BY
            Y.KEY1,
            Y.KEY2,
            Y.VALUE1,Y.VALUE2) B
ON
    (A.KEY1 = B.KEY1
AND A.KEY2 = B.KEY2)

它似乎几乎使用了
max()


嗯,我忘了value1和value2列可以是字母数字的,那么max还能工作吗?嗯,我忘了value1和value2列可以是字母数字的,那么max还能工作吗?
select key1, key2, max(val1), max(val2)
from TBL_K tk
group by key1, key2;