将两个表中的数据合并为一个

时间:2015-08-06 11:08:37

标签: sql sql-server merge

软件:SQL Server Management Studio 2008

我在2个表中获得了一个数据池。我想根据某些要求对数据进行整理并将其粘贴到第三个表中。

这是表1(master.dbo.FloatTable)

Date and Time   Militm  TagIndex    Val Status  Marker
8-6-15 10:30 AM  671      0              78      B
8-6-15 10:30 AM  671      1              76      B
8-6-15 10:30 AM  671      2              76      B
8-6-15 10:30 AM  671      3              72      B
8-6-15 10:30 AM  671      4              70      B
8-6-15 10:30 AM  671      5              72      B

表2(master.dbo.TagTable)

TagName                      TagIndex   TagType TagDataType
Capacity_9251_Ashift_History    0          2        0
Capacity_9251_Bshift_History    1          2        0
Capacity_9251_Cshift_History    2          2        0
Capacity_9252_Ashift_History    3          2        0
Capacity_9252_Bshift_History    4          2        0

我将它们合并为 表3(CuringHistoryData.dbo.CuringData)

在列标题下 TagIndex,Date,PressNumber,Shift,Capacity,Production

代码:

    DELETE 
    CuringHistoryData.dbo.CuringData 

    INSERT 
    INTO CuringHistoryData.dbo.CuringData (Date, TagIndex)

    SELECT CONVERT(varchar(20),DateAndTime,103), TagIndex
    FROM master.dbo.FloatTable
    WHERE Status != 'U' AND TagIndex BETWEEN 0 AND 320
    ORDER BY TagIndex 

    UPDATE CuringHistoryData.dbo.CuringData
    SET CuringHistoryData.dbo.CuringData.PressNumber =SUBSTRING(TagName,10,len(master.dbo.TagTable.TagName)-24),
        CuringHistoryData.dbo.CuringData.Shift =RIGHT(SUBSTRING(TagName,10,len(master.dbo.TagTable.TagName)-22),1)
    FROM CuringHistoryData.dbo.CuringData 
    INNER JOIN master.dbo.TagTable
    ON CuringHistoryData.dbo.CuringData.TagIndex = master.dbo.TagTable.TagIndex AND master.dbo.TagTable.TagIndex BETWEEN 0 AND 320

    UPDATE CuringHistoryData.dbo.CuringData
    SET CuringHistoryData.dbo.CuringData.Capacity = master.dbo.FloatTable.Val
    FROM CuringHistoryData.dbo.CuringData 
    INNER JOIN master.dbo.FloatTable
    ON CuringHistoryData.dbo.CuringData.TagIndex = master.dbo.FloatTable.TagIndex AND master.dbo.FloatTable.TagIndex BETWEEN 0 AND 320
    WHERE master.dbo.FloatTable.Status != 'U'

这加入了前321行,我得到了完美的结果 这是我得到的结果

    TagIndex    Date    PressNumber Shift   Capacity    Production
      0       06-08-15    9251        A        78           NULL                                                            
      1       06-08-15    9251        B        76           NULL                                                                        
      2       06-08-15    9251        C        80           NULL                                                                                    
      3       06-08-15    9252        A        90           NULL

然后直到tagindex 320

现在我还需要合并从tagindex 321到640的生产数据 我正在考虑将CuringData表中的印刷机编号与TagTable进行比较,并获得相应的索引编号。然后获取该索引号并从FloatTable中获取相应的值并将其粘贴到相应IndexNumber上的CuringData

由于我对SQL语言知之甚少,所以我无法理解这一点(我确信你在阅读我编写的代码时能感觉到这一点)

需要帮助整理出来。

1 个答案:

答案 0 :(得分:0)

[1]首先你制作表" x"根据您的要求。

[2]使用左外连接并根据您的数据需求进行选择查询

选择* 来自FloatTable a 左外连接TagTable b在a.TagIndex = b.TagIndex
上 左外连接生产c ...................

[3]用户以下命令: 插入x 选择 * 来自FloatTable a 左外连接TagTable b在a.TagIndex = b.TagIndex
上 左外连接生产c ...................

插入x表。

请给我正确的桌子设计,这样我就可以给你完美的询问。