Was ich denke, du wirst eine zusätzliche Tabelle müssen, ist, eine Dimension oder Zuordnungstabelle, die Ihnen Informationen zu diesen Terminen/Monat geben. Ich denke, Sie können sich dann ein paar Mal daran beteiligen, um Ihre vollständige Liste zu erhalten.
Hier ist, was ich getan habe:
CREATE TABLE #tblCurrent
(ID INT,
First_Date VARCHAR(9),
Last_Date VARCHAR(9),
TotalMonths INT,
VAR1 INT,
VAR2 INT)
INSERT INTO #tblCurrent
SELECT 123,'01jan2015','01mar2015',3,5,2
union
SELECT 124,'01jul2015','01aug2015',2,5,2
union
SELECT 125,'01jan2015','01jan2015',1,5,2
Dies war nur eine Tabelle erstellen Sie nachahmen ...
CREATE TABLE #Month
([MonthName] VARCHAR(9),
MonthRank INT)
INSERT INTO #Month
SELECT '01jan2015', 1
union SELECT '01feb2015', 2
union SELECT '01mar2015', 3
union SELECT '01apr2015', 4
union SELECT '01may2015', 5
union SELECT '01jun2015', 6
union SELECT '01jul2015', 7
union SELECT '01aug2015', 8
union SELECT '01sep2015', 9
union SELECT '01oct2015', 10
union SELECT '01nov2015', 11
union SELECT '01dec2015', 12
Dies war eine Tabelle mit Monat Informationen, wie der Auftrag/Rang zu schaffen .
SELECT c.*, m3.MonthRank Time_ID
FROM #tblCurrent c
JOIN #Month m ON c.First_Date = m.[MonthName]
JOIN #Month m2 ON c.Last_Date = m2.[MonthName]
JOIN #Month m3 ON m3.MonthRank >= m.MonthRank and m3.MonthRank <=m2.MonthRank
ORDER BY ID, m3.MonthRank
Dieser dritte Schritt zieht in Informationen über den ersten Monat (Join m), die im letzten Monat (zusammen m2) und dann alle die Monate dazwischen (m3).
Wenn Sie weiterhin den '01jan2015'-Stil von Daten verwenden, wäre es wahrscheinlich nützlich, eine Datumsdimensionstabelle zu erstellen, um eine Reihe relevanter Informationen in Spalten zu speichern .... Monat, Jahr usw.
Beginnend mit dem einfachsten zuerst - ich denke wirklich, dass dies getan hat - Danke data_null! – user3791254