Uwzględniając follwing:SQL: Najlepszym sposobem, aby zbudować harmonogram z dwóch tabel historii
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')
szukam czystej sposób skonstruować harmonogram relacji państw/PCP/zaplanować, gdzie zmiana albo PCP, albo plan dla członka spowoduje w wyniku oddzielny wiersz początkowy/końcowy. Na przykład, jeśli w ciągu kilku lat, członek zmienili PCP dwukrotnie, a ich plan raz, ale każdy w różnych terminach, chciałbym zobaczyć coś jak następuje:
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
Jak widać, muszę oddzielny wiersz wyników dla każdego okresu, w którym występuje różnica w powiązaniu Członek/PCP/Plan. Mam rozwiązanie na miejscu, ale jest bardzo skomplikowane z wieloma instrukcjami CASE i logiką warunkową w klauzuli WHERE. Po prostu myślę, że jest o wiele prostszy sposób na zrobienie tego.
Dzięki.
Czy widzimy twoją pracę? –
Czy możesz umieścić tę skomplikowaną instrukcję CASE w [SQLFiddle] (http://sqlfiddle.com/), abyśmy mogli zobaczyć, co zrobiłeś? –
To naprawdę skomplikowana sprawa. Nie wiem, czy jest to * znacznie prostszy sposób *. Więc prawdopodobnie powinieneś opublikować swoje rozwiązanie, a my pomożemy Ci zacząć tam – Lamak