如何使用“合并”将行组合成一个行

时间:2016-08-09 07:38:48

标签: sql-server merge

方案: 我有一个从一系列复杂连接中获得的结果集的简化版本。我已将结果集放在临时表中。结果集包含一天中活动/活动的记录。

Result Set

我需要将具有相似日期的2行( 一天的合并活动合并为一行 )加入,以便生成的结果集

desired result set

我正在尝试做这项工作

Merge #temp as target
using #temp as source
on (target.Date = source.Date) and target.Writing is NULL
when matched then
update set target.Writing = source.Writing;

但我遇到了这个错误:

  

MERGE语句尝试更多地更新或删除同一行   不止一次。当目标行匹配多个源时会发生这种情况   行。 MERGE语句不能更新/删除目标的同一行   表多次。优化ON子句以确保目标行   匹配最多一个源行,或使用GROUP BY子句进行分组   源行。

您可以建议哪些代码修改?

3 个答案:

答案 0 :(得分:0)

这应该这样做:

//jQuery
$('.dataTable').dataTable( {
  "columnDefs": [
    { "width": "45", "targets": 0 }
  ]
} ); 

//css
.dataTable > thead > tr > th:first-child {
    width: 45px!important;
}

请注意,在我的测试中,我调用了我的表目标和列:mydate,starttime,endtime,activitya和activityb。

无需合并,(相对)简单的选择会产生您想要的结果。

HTH

PS当使用时间数据使用24小时制时,它会有所帮助。我假设到5点你真的是17点

答案 1 :(得分:0)

您不需要MERGE语句。

DECLARE @Test TABLE ([Id] int, [Date] nvarchar(10), [TimeIn] nvarchar(10), [TimeOut] nvarchar(10), [Reading] nvarchar(10), [Writeing] nvarchar(10))
INSERT INTO @Test 
VALUES
(1,'08-01','8:00','5:00','Y',NULL),
(2,'08-02','8:00','5:00',NULL,'Y'),
(3,'08-02','5:00','12:00',NULL,'Y'),
(4,'08-03','8:00','5:00',NULL,'Y'),
(5,'08-04','1:00','5:00','Y',NULL),
(6,'08-04','5:00','7:00',NULL,'Y'),
(7,'08-04','7:00','10:00',NULL,'Y'),
(8,'08-04','10:00','13:00',NULL,'Y'),
(9,'08-05','8:00','5:00','Y',NULL)

;WITH CTE AS
(
    SELECT 
        t1.[Date],
        t1.TimeIn,
        ISNULL(t2.TimeOut, t1.TimeOut) AS TimeOut,
        ROW_NUMBER() OVER (PARTITION BY t1.[Date] ORDER BY t1.Id) AS RowNumber
    FROM @Test AS t1
    LEFT OUTER JOIN @Test AS t2 ON t1.TimeOut = t2.TimeIn AND t1.[Date] = t2.[Date]
)
SELECT
    c.[Date],
    (SELECT c2.TimeIn FROM CTE AS c2 WHERE c2.[Date] = c.[Date] AND c2.RowNumber = MIN(c.RowNumber)) AS TimeIn,
    (SELECT c2.TimeOut FROM CTE AS c2 WHERE c2.[Date] = c.[Date] AND c2.RowNumber = MAX(c.RowNumber)) AS TimeOut
FROM CTE AS c
GROUP BY c.[Date]

答案 2 :(得分:0)

您可以在具有相同列的表中使用合并语句。您可以标识可用于唯一标识要合并的行的一个或多个列。