sql select返回行

8fq7wneg  于 2021-06-27  发布在  Hive
关注(0)|答案(2)|浏览(252)

根据标题来描述我的要求有点困难,但是我会用表格示例和结果期望来发布。
我有一张table(我们称之为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

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

abithluo

abithluo1#

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)
z0qdvdin

z0qdvdin2#

好像快用了 max() :

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

相关问题