-- create
CREATE TABLE MasterCriteriaTable (
MasterCriteriaRowID varchar(10),
DetailCriteriaID varchar(100)
);
-- insert
INSERT INTO MasterCriteriaTable VALUES ('1','1,2,3,5-8,13'), ('2','5,6,12,17-20,22-24');
-- fetch
SELECT * FROM MasterCriteriaTable;
WITH MasterCriteria AS (
SELECT
MasterCriteriaRowId,
case when charindex('-',ss.value)=0
then ss.value
else CAST(LEFT(ss.value, CHARINDEX('-', ss.value) - 1) AS INT) end
AS CriteriaID,
case when charindex('-', ss.value)=0
then ss.value
else CAST(RIGHT(ss.value, LEN(ss.value) - CHARINDEX('-', ss.value)) AS INT) end
AS MaxCriteriaID
from (select value, MasterCriteriaRowID from MasterCriteriaTable cross apply string_split(DetailCriteriaID,',')) ss
UNION ALL
SELECT MasterCriteriaRowId, CriteriaID + 1, MaxCriteriaID
FROM MasterCriteria
WHERE CriteriaID + 1 <= MaxCriteriaID
)
SELECT MasterCriteriaRowId, CriteriaID FROM MasterCriteria order by MasterCriteriaRowId, CriteriaID;
GO