Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用合并更新与目标表中的多个匹配记录之一合并_Sql Server_Sql Merge_Multiple Matches - Fatal编程技术网

Sql server 使用合并更新与目标表中的多个匹配记录之一合并

Sql server 使用合并更新与目标表中的多个匹配记录之一合并,sql-server,sql-merge,multiple-matches,Sql Server,Sql Merge,Multiple Matches,我有两个几乎相同列的表。需求是将源表的行合并到目标表中。问题是,目标表有多个具有不同类型费用的匹配行,我想将源记录与任何一个匹配行合并 这是我的桌子 CREATE TABLE Target ( [rowId] int, [EmployeeNumber] int, [ServiceFromDate] date, [ServiceToDate] date, [BillType] varchar(3), [

我有两个几乎相同列的表。需求是将源表的行合并到目标表中。问题是,目标表有多个具有不同类型费用的匹配行,我想将源记录与任何一个匹配行合并

这是我的桌子

    CREATE TABLE Target
    (
      [rowId] int,
      [EmployeeNumber] int, 
      [ServiceFromDate] date, 
      [ServiceToDate] date, 
      [BillType] varchar(3), 
      [BillDate] date,
      [Expense] int, 
      [Trace] varchar(max)
)

INSERT INTO Target ([rowId], [EmployeeNumber], [ServiceFromDate], [ServiceToDate], [BillType], [BillDate], Expense,[Trace])
VALUES
    (1, 101, '2020-01-01', '2020-01-01', '111', '2020-01-01',100,'Trace-1-101-111'),
    (2, 101, '2020-01-01', '2020-01-01', '112', '2020-01-01',100,'Trace-2-101-112'),
    (3, 101, '2020-01-01', '2020-01-01', '111', '2020-01-01',100,'Trace-3-101-111'),
    (4, 101, '2020-01-01', '2020-01-01', '121', '2020-01-01',100,'Trace-4-101-121'),
    (5, 101, '2020-01-01', '2020-01-01', '121', '2020-01-01',100,'Trace-5-101-121'),
    (6, 101, '2020-01-01', '2020-01-01', '121', '2020-01-01',100,'Trace-6-101-121'),
    (7, 102, '2020-01-01', '2020-01-01', '131', '2020-01-01',100,'Trace-7-101-131'),
    (8, 102, '2020-01-01', '2020-01-01', '114', '2020-01-01',100,'Trace-8-101-114'),
    (9, 102, '2020-01-01', '2020-01-01', '114', '2020-01-01',100,'Trace-9-101-114'),
    (10, 102, '2020-01-01', '2020-01-01', '112', '2020-01-01',100,'Trace-10-101-112');



CREATE TABLE Source1
    (
      [EmployeeNumber] int, 
      [ServiceFromDate] date, 
      [ServiceToDate] date, 
      [BillType] varchar(3), 
      [BillDate] date,
      [Expense] int, 
      [Trace] varchar(max)
)


go

INSERT INTO Source1 ([EmployeeNumber], [ServiceFromDate], [ServiceToDate], [BillType], [BillDate], [Expense],[Trace])
VALUES
    (101, '2020-01-01', '2020-01-01', '115', '2020-01-01',100,'Trace-1-101-115'),
    (101, '2020-01-01', '2020-01-01', '115', '2020-01-01',100,'Trace-2-101-115'),
    (101, '2020-01-01', '2020-01-01', '115', '2020-01-01',100,'Trace-3-101-115'),
    (101, '2020-02-01', '2020-01-01', '125', '2020-01-01',100,'Trace-4-101-125'),
    (101, '2020-01-01', '2020-01-01', '125', '2020-01-01',100,'Trace-5-101-125'),
    (101, '2020-03-01', '2020-01-01', '125', '2020-01-01',100,'Trace-6-101-125'),
    (102, '2020-01-01', '2020-01-01', '135', '2020-01-01',100,'Trace-7-101-135'),
    (105, '2020-01-01', '2020-01-01', '115', '2020-01-01',100,'Trace-8-101-115'),
    (102, '2020-01-01', '2020-01-01', '115', '2020-01-01',100,'Trace-9-101-115'),
    (102, '2020-01-01', '2020-01-01', '115', '2020-01-01',100,'Trace-10-101-115');
我想将以“%5”结尾的账单类型与EmployeNumber、服务日期和账单类型匹配的任何一个目标表记录合并

任何帮助都将不胜感激

要为合并匹配的列包括 [雇员编号] [账单日期]

如果这些匹配,那么将添加费用并添加跟踪

预期输出如下所示

(1, 101, '2020-01-01', '2020-01-01', '111', '2020-01-01',400,'Trace-1-101-111, Trace-1-101-115, Trace-2-101-115, Trace-3-101-115...'),
(2, 101, '2020-01-01', '2020-01-01', '112', '2020-01-01',100,'Trace-2-101-112'),
(3, 101, '2020-01-01', '2020-01-01', '111', '2020-01-01',100,'Trace-3-101-111'),
(4, 101, '2020-01-01', '2020-01-01', '121', '2020-01-01',100,'Trace-4-101-121'),
(5, 101, '2020-01-01', '2020-01-01', '121', '2020-01-01',100,'Trace-5-101-121'),
(6, 101, '2020-01-01', '2020-01-01', '121', '2020-01-01',100,'Trace-6-101-121'),

(7, 102, '2020-01-01', '2020-01-01', '131', '2020-01-01',400,'Trace-7-101-131,Trace-7-101-135,Trace-9-101-115,Trace-10-101-115'),
(8, 102, '2020-01-01', '2020-01-01', '114', '2020-01-01',100,'Trace-8-101-114'),
(9, 102, '2020-01-01', '2020-01-01', '114', '2020-01-01',100,'Trace-9-101-114'),
(10, 102, '2020-01-01', '2020-01-01', '112', '2020-01-01',100,'Trace-10-101-112');

(105, '2020-01-01', '2020-01-01', '115', '2020-01-01',100,'Trace-8-101-115'), // New Row as no matching record
(101, '2020-01-01', '2020-01-01', '115', '2020-01-01',100,'Trace-3-101-115'), // New Row as no matching record

那么,对于您提供给我们的数据,您的预期结果是什么?@Larnu,我更新了我的原始问题,添加了更多细节和预期结果