【发布时间】:2018-10-30 01:57:50
【问题描述】:
我在 csv 文件中有一些记录,这些记录通过 MS Access 数据库加载到 MS SQL Server 2016 表中。在将这些记录插入 SQL 数据库表之前,我想使用 VBA 查询或 T-SQL 查询(而不是使用记录集的 VBA 代码)对这些记录进行分组。
示例输入:
ShiftID Name_ID From To Length Size Chargeable**
----------------------------------------------------------------------------
DAY1 CLASSIC_1 0.0 2.8 2.8 NQ2 Yes
DAY1 CLASSIC_1 2.8 5.8 3 NQ2 No
DAY1 CLASSIC_1 5.8 8.0 2.2 NQ2 No
DAY1 CLASSIC_1 8.0 11.1 3.1 NQ2 Yes
DAY1 CLASSIC_1 11.1 14.3 3.2 NQ2 Yes
所需输出:
ShiftID Name_ID From To Length Size Chargeable
----------------------------------------------------------------------
DAY1 CLASSIC_1 0.0 2.8 2.8 NQ2 Yes
DAY1 CLASSIC_1 2.8 8.0 5.2 NQ2 No
DAY1 CLASSIC_1 8.0 14.3 6.3 NQ2 Yes
使用查询:
SELECT ShiftID, Name_ID, Min([From]) AS [From], Max([To]) AS [To], Sum(Length) AS Length,
Size, Chargeable FROM table1
GROUP BY ShiftID, Name_ID, Size, Chargeable
ORDER BY ShiftID, Name_ID, Min([From]), Max([To]), Size, Chargeable;
返回以下记录:
ShiftID Name_ID From To Length Size Chargeable
----------------------------------------------------------------
DAY1 CLASSIC_1 0.0 14.3 9.1 NQ2 Yes
DAY1 CLASSIC_1 2.8 8.0 5.2 NQ2 No
这是我所期望的,但不是我需要的。在这种情况下,分组并没有给我正确的 To 深度。正确的查询不应返回重叠的间隔。
【问题讨论】:
-
只使用直接的 SQL,我脑子里什么都没有。我只能看到在 SQL Server 的存储过程中使用游标,或在 Access 中使用 VBA 通过遍历结果来创建临时表。也许其他人会看到不涉及循环的更明显的解决方案。
标签: sql-server tsql ms-access vba