2011-10-21 137 views
6

编辑: 尝试使用COALESCE方法后,我现在看到一个问题,即每个瓦数类别的数据都使用相同的数据重复其自身。第2列是瓦数。 enter image description here以不同的数据连接两个相同的表结构

我创建了两个具有完全相同表结构的临时表。在这些表格中,有多个列可以具有相同的值,然后是具有不同数字的几个值列。其中一些在一列中将为NULL,而在另一列中不为空。我想把所有的值都放在一起,并且在同一个站点和工厂的行上我想要加入的值。

下面是这两个表可能看起来像什么,结果我期望

TABLE1一个例子:

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

请勿使用HTML标记。使用“格式代码”图标粘贴保留空格的表格。 –

+0

@Tom - S1和S2未列为列或表格。你实际上指的是什么? –

回答

1

您可以使用coalesce。它将从参数中返回第一个非空值。

SELECT coalesce(t1.Site, t2.Site) as Site, coalesce(t1.Plant, t2.Plant) as Plant, 
4

需要两个技巧来完成此查询。第一个是FULL JOIN。完全联接将允许您组合两个表,并在不匹配联接条件时将空值插入到任一表中。第二个是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 
+0

感谢您的输入,我需要聪明的合并功能。请参阅更新的问题 – Tom

相关问题