Hello, this is a simplified sample to demonstrate the problem I am having:
CREATE TABLE #Sample (ID INT NOT NULL, Yr INT NOT NULL, Col_A VARCHAR(10), Col_B INT, Col_C INT)
INSERT INTO #Sample values
(1, 2004, 'N/S', 10, 255),
(1, 2005, 'N/S', 10, 255),
(1, 2006, 'N/S', NULL, 1),
(1, 2007, 'N/S', 10, 255),
(1, 2008, 'N/S', 10, 255),
(1, 2009, 'N/S', 10, 255),
(1, 2010, 'N/S', 0, 255),
(1, 2011, 'N/A', 10, 255),
(1, 2012, 'N/A', 10, 255),
(1, 2013, 'N/A', 0, 0),
(1, 2014, 'Y', 101, 256),
(1, 2015, 'N/S', 1, 32),
(1, 2016, 'N/A', NULL,NULL );
SELECT CASE WHEN MIN(YR )=MAX(YR) THEN CAST(MIN(YR) AS CHAR(4)) ELSE CAST(MIN(YR ) AS CHAR(4))+'-'+RIGHT(CAST(MAX(YR) AS CHAR(4)),2) END AS FROMYEAR_TOYEAR,
ID , Col_A , Col_B , Col_C
FROM #Sample GROUP BY
ID , Col_A , Col_B , Col_C ORDER BY 1
RESULTS:
FROMYEAR_TOYEAR ID Col_A Col_B Col_C
2004-09 1 N/S 10 255
2006 1 N/S NULL 1
2010 1 N/S 0 255
2011-12 1 N/A 10 255
2013 1 N/A 0 0
2014 1 Y 101 256
2015 1 N/S 1 32
2016 1 N/A NULL NULL
CORRECT RESULTS SHOULD BE:
FROMYEAR_TOYEAR ID Col_A Col_B Col_C
2004-05 1 N/S 10 255
2006 1 N/S NULL 1
2007-09 1 N/S 10 255
2010 1 N/S 0 255
2011-12 1 N/A 10 255
2013 1 N/A 0 0
2014 1 Y 101 256
2015 1 N/S 1 32
2016 1 N/A NULL NULL
Please notice that periods from 2004 to 2009 though having same data have to be broken down, as the year in between(2006) had different data. I was trying to process the records by using windowing functions to break the group with the gap in years but as of today I don't have a viable solution...It seems to me there should be a way to do it in a single select statement...
Thank you for your help in advance