我在两个表中有以下示例数据:
表1
Item Loc Hierarchy Val1 Val2 Val3 Val4
I1 L1 Item null null null D1
I2 L2 Item null null null D2
I2 L3 Item null null null D3
表2
Item Loc Hierarchy Val1 Val2 Val3 Val4
L1 ' ' A1 B1 C1 null
L4 ' ' A4 B4 C4 null
基本上-
层次结构列可以具有'Item'或''值。
Item @ Loc的多个组合可以存在。但是只有在“层次结构”为“项目”时才有“项目”条目。 “”层次结构值的“项目”列为空白。
Loc可以遵循以下可能的情况-
表1中带有Val1,Val2,Val3为空的一行
在表2中,另一行的Val1,Val2,Val3的值和Val4为null。
在表1中只有一行的Val1,2,3值和Val4为空;表2中没有行。
表2中只有一行的Val4值和Val1,2,3为空;表1中没有带有Val1,2,3值的行。
预期结果-
Item Loc Hierarchy Val1 Val2 Val3 Val4
I1 L1 Item A1 B1 C1 D1
I2 L2 Item null null null D2
I2 L3 Item null null null D3
L4 ' ' A4 B4 C4 null
如何合并数据并达到期望的结果?通过完全外部联接? 是否有其他可提高性能的替代方法,还是提高完整外部联接查询的一种方法。 由于这是较大查询的子集,因此一旦获得此结果,就必须使用该数据集来更新另一个具有约100M条记录的表(因此需要寻找性能高效的块)。
预先感谢!
答案 0 :(得分:1)
使用联合查询:
SELECT
MAX(Item) AS Item,
Loc,
CASE WHEN COUNT(CASE WHEN Hierarchy <> ' ' THEN 1 END) > 0
THEN MAX(CASE WHEN Hierarchy = ' ' THEN NULL ELSE Hierarchy END)
ELSE MAX(Hierarchy) END AS Hierarchy,
MAX(Val1) AS Val1,
MAX(Val2) AS Val2,
MAX(Val3) AS Val3,
MAX(Val4) AS Val4
FROM
(
SELECT Item, Loc, Hierarchy, Val1, Val2, Val3, Val4 FROM Table1
UNION ALL
SELECT Item, Loc, Hierarchy, Val1, Val2, Val3, Val4 FROM Table2
) t
GROUP BY
Loc
ORDER BY
Loc;