使用公共ID合并两个查询结果

时间:2015-04-09 06:18:27

标签: sql process

我已经将SQL运行到不同的数据库中并获得了两组查询结果(实际上有两个以上,但现在要保持简单)。 我需要使用VB代码将公共ID加入两个查询结果。

第一组查询结果(在查询输出之前是未知的)看起来像

Item ID    Property A
I1         a1
I2         a2
I3         a3
....

第二组查询结果(在第二次查询输出之前是另一个未知)看起来像

Item ID    Property B    Property B Ref Order
I1         b1-1          1
I1         b1-3          3
I1         b1-2          2
I2         b2-1          1
I2         b2-2          2
I3         b3-2          2
I3         b3-1          1
....

我想将这样的两个查询结果与VB代码

合并
Item ID    Property A    Property B-1    Property B-2    Property B-3
I1         a1            b1-1            b1-2            b1-3
I2         a2            b2-1            b2-2   
I3         a3            b3-1            b3-2   
....

我怎么能这样做?非常感谢您的帮助。

编辑:我认为需要进行一定程度的后处理,但是VB代码是否可以实现?

1 个答案:

答案 0 :(得分:2)

你可以使用PIVOT:

CREATE TABLE Temp1 (
    ItemID VARCHAR(10),
    PropertyA NVARCHAR(40)
);
INSERT INTO Temp1 (ItemID, PropertyA) VALUES  ('i1', 'a1'), 
                                              ('i2', 'a2'), 
                                              ('i3', 'a3');
CREATE TABLE Temp2 (
    ItemID VARCHAR(10),
    PropertyB NVARCHAR(40),
    PropertyBorder INT
);
INSERT INTO Temp2 (ItemID, PropertyB, PropertyBorder) VALUES  ('i1', 'b1-1', 1), 
                                                              ('i1', 'b1-3', 3), 
                                                              ('i1', 'b1-2', 2),
                                                              ('i2', 'b2-1', 1), 
                                                              ('i2', 'b2-2', 2),
                                                              ('i3', 'b3-2', 2), 
                                                              ('i3', 'b3-1', 1);

SELECT  ItemID, PropertyA, 
        [1] AS [Property B-1], 
        [2] AS [Property B-2], 
        [3] AS [Property B-3]
FROM 
    (
        SELECT Temp1.ItemID, PropertyA, PropertyB, PropertyBorder
        FROM Temp2 
        JOIN Temp1 ON Temp1.ItemID = Temp2.ItemID
    ) t2

PIVOT
(
   MIN(t2.PropertyB)
   FOR PropertyBorder IN ([1], [2], [3])
) as pvt

输出:

ItemID  PropertyA   Property B-1    Property B-2    Property B-3
i1          a1          b1-1            b1-2            b1-3
i2          a2          b2-1            b2-2            NULL
i3          a3          b3-1            b3-2            NULL

<强> SQL FIDDLE