编辑: 在尝试COALESCE方法之后,我现在看到一个问题,即每个瓦特类别的数据都在重复自己的相同数据。第2列是瓦数。
我创建了两个临时表,两者都具有完全相同的表结构。在这些表中,有多个列可以具有相同的值,然后是一些具有不同数字的值列。其中一些在一列中为NULL,而在另一列中不为null。我希望将所有值组合在一起,并且在具有相同站点和工厂的行上,我希望将值加入。
以下是两个表的外观和我期望的结果
的示例表1:
SITE PLANT VALUE_1 VALUE 2
S1 P1 54 66
S1 P2 43 43
表2:
SITE PLANT VALUE_1 VALUE_2
S1 P1 33 43
S2 P1 34 22
结果:
SITE PLANT t1_VALUE_1 t1_VALUE_2 t2_VALUE_1 t2_VALUE2
S1 P1 54 66 33 43
S1 P2 43 43 NULL NULL
S2 P1 NULL NULL 34 22
我原来的想法是完全加入。但是,这不起作用,因为在您的select语句中,您必须指定从哪里抓取列,如站点和工厂;但要选择t1.site和t2.site将生成两列。我得到的最接近的是下面的查询,但是只要S2中的某个结果有一个站点和工厂不在S1中,您就会收到S1和S2的空值。
SELECT t1.Site, t1.Plant, t1.Value_1, t1.Value_2, t2.Value_1, t2.Value_2
FROM table1 t1
FULL JOIN table2 t2
ON t1.site = t2.site
AND t1.plant = t2.plant
答案 0 :(得分:4)
完成此查询需要两个技巧。第一个是全加入。完全连接将允许您组合两个表,并在不匹配连接条件时在任一表中插入空值。第二个是COALESCE,它允许您从结果中的这一行的任何一个表中提取工厂和站点。
SELECT Coalesce(t1.Site,t2.Site) As Site, COALESCE(t1.Plant, t2.Plant) As Plant,
t1.Value_1 As t1_Value_1, t1.Value_2 As t1_Value_2,
t2.Value_1 As t2_Value_1, t2.Value_2 As t2_Value_2
FROM Table1 t1
FULL JOIN Table2 t2 ON t1.Site = t2.Site AND t1.Plant = t2.Plant
答案 1 :(得分:1)
您可以使用coalesce。它将从参数返回第一个非空值。
SELECT coalesce(t1.Site, t2.Site) as Site, coalesce(t1.Plant, t2.Plant) as Plant,