使用不同的数据连接两个相同的表结构

时间:2011-10-21 20:12:08

标签: sql sql-server tsql sql-server-2008

编辑: 在尝试COALESCE方法之后,我现在看到一个问题,即每个瓦特类别的数据都在重复自己的相同数据。第2列是瓦数。 enter image description here

我创建了两个临时表,两者都具有完全相同的表结构。在这些表中,有多个列可以具有相同的值,然后是一些具有不同数字的值列。其中一些在一列中为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

2 个答案:

答案 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,