如果列基于键列包含值或空值,则SQL选择返回行
根据标题来描述我的需求有点困难,不过我会发布一个表格示例和结果预期 我有一张桌子(我们叫它TBL_K),看起来像这样:如果列基于键列包含值或空值,则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
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;