Sql server TQSL-将3个临时表(每个表包含日期跨度)组合到每个可能的组合中,而不会导致重叠
我尝试将三个临时表组合起来,每个表都有不同度量的开始和结束范围,以创建一个包含所有可能范围的组合表。下面的脚本创建了所有三个临时表,并(附加的Excel)显示了结果应该是什么,但我还无法实现这一点。:)Sql server TQSL-将3个临时表(每个表包含日期跨度)组合到每个可能的组合中,而不会导致重叠,sql-server,tsql,Sql Server,Tsql,我尝试将三个临时表组合起来,每个表都有不同度量的开始和结束范围,以创建一个包含所有可能范围的组合表。下面的脚本创建了所有三个临时表,并(附加的Excel)显示了结果应该是什么,但我还无法实现这一点。:) 这可能对你有帮助- DECLARE @aoRepGroupMbrHistory TABLE ( syUserID INT , aoRepGroupID INT , Hist_EffectStart DATETIME , Hist_EffectiveE
这可能对你有帮助-
DECLARE @aoRepGroupMbrHistory TABLE
(
syUserID INT
, aoRepGroupID INT
, Hist_EffectStart DATETIME
, Hist_EffectiveEnd DATETIME
, RepGroupName VARCHAR(50)
)
INSERT INTO @aoRepGroupMbrHistory
VALUES
(17716, 165, '2010-06-03 00:00:00.000', '2012-03-01 23:59:59.997', 'UG - All Skills Reps')
, (17716, 772, '2012-03-02 00:00:00.000', '2012-06-26 23:59:59.997', 'UG - Tier 1 LC Reps')
, (17716, 797, '2012-06-27 00:00:00.000', '2012-11-08 23:59:59.997', 'UG - Aggregators Reps')
, (17716, 165, '2012-11-09 00:00:00.000', '2012-11-29 23:59:59.997', 'UG - All Skills Reps')
, (17716, 797, '2012-11-30 00:00:00.000', '9999-01-01 00:00:00.000', 'UG - Aggregators Reps')
DECLARE @TeamMemberHistory TABLE
(
syUserID INT
, CRMTeamID INT
, Active INT
, HistoryStartDate DATETIME
, HistoryEndDate DATETIME
)
INSERT INTO @TeamMemberHistory
VALUES
(17716, 637, 1, '2011-04-20 00:00:00.000', '2012-05-15 23:59:59.997')
, (17716, 634, 1, '2012-05-16 00:00:00.000', '2012-06-20 23:59:59.997')
, (17716, 628, 1, '2012-06-21 00:00:00.000', '2012-10-23 23:59:59.997')
, (17716, 636, 1, '2012-10-24 00:00:00.000', '2012-12-13 23:59:59.997')
, (17716, 628, 1, '2012-12-14 00:00:00.000', '2013-04-17 23:59:59.997')
, (17716, 676, 1, '2013-04-18 00:00:00.000', '9999-01-01 00:00:00.000')
DECLARE @TeamHistory TABLE
(
CRMTeamID INT
, TeamOwner_TeamID INT
, Active INT
, TeamName VARCHAR(25)
, HistoryStartDate DATETIME
, HistoryEndDate DATETIME
)
INSERT INTO @TeamHistory
VALUES
(628, 222, 1, 'Team 126', '2011-01-10 00:00:00.000', '9999-01-01 00:00:00.000')
, (634, 168, 1, 'Team 132', '2010-01-07 00:00:00.000', '9999-01-01 00:00:00.000')
, (636, 935, 1, 'Team 134', '2011-05-09 00:00:00.000', '2013-02-12 23:59:59.997')
, (636, 935, 1, 'Team 134', '2013-02-13 00:00:00.000', '9999-01-01 00:00:00.000')
, (637, 192, 1, 'Team 135', '2010-08-03 00:00:00.000', '9999-01-01 00:00:00.000')
, (676, 242, 1, 'Team 360', '2011-05-21 00:00:00.000', '9999-01-01 00:00:00.000')
SELECT
th.syUserID
, t.TeamName
, t.CRMTeamID
, t.TeamOwner_TeamID
, h.aoRepGroupID
, h.RepGroupName
, dwEffectiveBeginDate = CONVERT(VARCHAR(10), th.HistoryStartDate, 101)
, dwEffectiveEndDate = CONVERT(VARCHAR(10), th.HistoryEndDate, 101)
FROM @TeamHistory t
JOIN @TeamMemberHistory th ON t.CRMTeamID = th.CRMTeamID
JOIN @aoRepGroupMbrHistory h ON th.syUserID = h.syUserID
从示例结果推断您的意图是一项艰巨的工作。为什么不通过添加解释来改进您的问题?您建议的结果集的第一行的“dwEffectiveBeginDate”为2012-01-01,但您的任何数据都没有该日期。。。那日期是从哪里来的?酷。到目前为止你试过什么?
DECLARE @aoRepGroupMbrHistory TABLE
(
syUserID INT
, aoRepGroupID INT
, Hist_EffectStart DATETIME
, Hist_EffectiveEnd DATETIME
, RepGroupName VARCHAR(50)
)
INSERT INTO @aoRepGroupMbrHistory
VALUES
(17716, 165, '2010-06-03 00:00:00.000', '2012-03-01 23:59:59.997', 'UG - All Skills Reps')
, (17716, 772, '2012-03-02 00:00:00.000', '2012-06-26 23:59:59.997', 'UG - Tier 1 LC Reps')
, (17716, 797, '2012-06-27 00:00:00.000', '2012-11-08 23:59:59.997', 'UG - Aggregators Reps')
, (17716, 165, '2012-11-09 00:00:00.000', '2012-11-29 23:59:59.997', 'UG - All Skills Reps')
, (17716, 797, '2012-11-30 00:00:00.000', '9999-01-01 00:00:00.000', 'UG - Aggregators Reps')
DECLARE @TeamMemberHistory TABLE
(
syUserID INT
, CRMTeamID INT
, Active INT
, HistoryStartDate DATETIME
, HistoryEndDate DATETIME
)
INSERT INTO @TeamMemberHistory
VALUES
(17716, 637, 1, '2011-04-20 00:00:00.000', '2012-05-15 23:59:59.997')
, (17716, 634, 1, '2012-05-16 00:00:00.000', '2012-06-20 23:59:59.997')
, (17716, 628, 1, '2012-06-21 00:00:00.000', '2012-10-23 23:59:59.997')
, (17716, 636, 1, '2012-10-24 00:00:00.000', '2012-12-13 23:59:59.997')
, (17716, 628, 1, '2012-12-14 00:00:00.000', '2013-04-17 23:59:59.997')
, (17716, 676, 1, '2013-04-18 00:00:00.000', '9999-01-01 00:00:00.000')
DECLARE @TeamHistory TABLE
(
CRMTeamID INT
, TeamOwner_TeamID INT
, Active INT
, TeamName VARCHAR(25)
, HistoryStartDate DATETIME
, HistoryEndDate DATETIME
)
INSERT INTO @TeamHistory
VALUES
(628, 222, 1, 'Team 126', '2011-01-10 00:00:00.000', '9999-01-01 00:00:00.000')
, (634, 168, 1, 'Team 132', '2010-01-07 00:00:00.000', '9999-01-01 00:00:00.000')
, (636, 935, 1, 'Team 134', '2011-05-09 00:00:00.000', '2013-02-12 23:59:59.997')
, (636, 935, 1, 'Team 134', '2013-02-13 00:00:00.000', '9999-01-01 00:00:00.000')
, (637, 192, 1, 'Team 135', '2010-08-03 00:00:00.000', '9999-01-01 00:00:00.000')
, (676, 242, 1, 'Team 360', '2011-05-21 00:00:00.000', '9999-01-01 00:00:00.000')
SELECT
th.syUserID
, t.TeamName
, t.CRMTeamID
, t.TeamOwner_TeamID
, h.aoRepGroupID
, h.RepGroupName
, dwEffectiveBeginDate = CONVERT(VARCHAR(10), th.HistoryStartDate, 101)
, dwEffectiveEndDate = CONVERT(VARCHAR(10), th.HistoryEndDate, 101)
FROM @TeamHistory t
JOIN @TeamMemberHistory th ON t.CRMTeamID = th.CRMTeamID
JOIN @aoRepGroupMbrHistory h ON th.syUserID = h.syUserID