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

时间:2018-10-02 17:53:24

标签: 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     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

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

2 个答案:

答案 0 :(得分:3)

似乎几乎要使用max()了:

select key1, key2, max(val1), max(val2)
from TBL_K tk
group by key1, key2;

答案 1 :(得分:0)

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)