考虑到以下情况:
CREATE TABLE Members (MemberID INT)
INSERT Members VALUES (1001)
CREATE TABLE PCPs (PCPID INT)
INSERT PCPs VALUES (231)
INSERT PCPs VALUES (327)
INSERT PCPs VALUES (390)
CREATE TABLE Plans (PlanID INT)
INSERT Plans VALUES (555)
INSERT Plans VALUES (762)
CREATE TABLE MemberPCP (
MemberID INT
, PCP INT
, StartDate DATETIME
, EndDate DATETIME)
INSERT MemberPCP VALUES (1001, 231, '2002-01-01', '2002-06-30')
INSERT MemberPCP VALUES (1001, 327, '2002-07-01', '2003-05-31')
INSERT MemberPCP VALUES (1001, 390, '2003-06-01', '2003-12-31')
CREATE TABLE MemberPlans (
MemberID INT
, PlanID INT
, StartDate DATETIME
, EndDate DATETIME)
INSERT MemberPlans VALUES (1001, 555, '2002-01-01', '2003-03-31')
INSERT MemberPlans VALUES (1001, 762, '2003-04-01', '2003-12-31')
我正在寻找一种简洁的方法来构建成员/PCP/计划关系的时间表,其中 PCP 或成员计划的更改将导致结果中出现单独的开始/结束行。例如,如果在几年内,一名成员更改了他们的 PCP 两次和一次计划,但每次都在不同的日期,我会看到如下内容:
MemberID PCP PlanID StartDate EndDate
1001 231 555 2002-01-01 2002-06-30
1001 327 555 2002-07-01 2003-03-31
1001 327 762 2003-04-01 2003-05-31
1001 390 762 2003-06-01 2003-12-31
如您所见,对于涉及成员/PCP/计划关联差异的每个日期期间,我需要一个单独的结果行。我有一个解决方案,但它与 WHERE 子句中的许多 CASE 语句和条件逻辑非常复杂。我只是在想有一种更简单的方法可以做到这一点。
谢谢。