Now, assuming you have a tally table already or built one from the script I provided in the previous post, below is the sql to build a sample test table from which to query, along with the sql to parse a multivalue parameter in order to return the desired records from the test table.
Code to populate a test table:
/****************************************************/
/* BUILD A SAMPLE DATASET OF SICCODES*/
/****************************************************/
IF OBJECT_ID('TEMPDB..#SICCODES') IS NOT NULL
DROP TABLE #SICCODES
CREATE TABLE #SICCODES
(
SICCODE VARCHAR(4)
,SICCODE_TEXT VARCHAR(50)
)
INSERT #SICCODES
(
SICCODE
,SICCODE_TEXT
)
SELECT '5810', '5810-RETAIL-EATING & DRINKING PLACES'
UNION ALL
SELECT '5812', '5812-RETAIL-EATING PLACES'
UNION ALL
SELECT '5812','5812-RESTAURANTS'
UNION ALL
SELECT '5812','5812-PLACES TO EAT'
UNION ALL
SELECT '5812','5812-DINERS, DRIVE-INS, AND DIVES'
UNION ALL
SELECT '5900', '5900-RETAIL-MISCELLANEOUS RETAIL'
UNION ALL
SELECT '5912', '5912-RETAIL-DRUG STORES AND PROPRIETARY STORES'
UNION ALL
SELECT '5940', '5940-RETAIL-MISCELLANEOUS SHOPPING GOODS STORES'
UNION ALL
SELECT '5944', '5944-RETAIL-JEWELRY STORES'
UNION ALL
SELECT '5945', '5945-RETAIL-HOBBY, TOY & GAME SHOPS'
/* SELECT * FROM #SICCODES */
Code to parse out a multivalue parameter to simulate "StartsWith...". Be sure to test out both joins in the SQL -- there's an "=" join and a "Like" join (only one should be active at a time):
/************************************************************************************************/
/* RETURN RESULTS BASED ON SIMULATING THE PASSING OF A MULTIVALUE DELIMITED STRING PARAMETER*/
/************************************************************************************************/
DECLARE @Parameter VARCHAR(2000)
,@Delimiter CHAR(1)
SET @Delimiter = ','
SET @Parameter = '5812,594' /* SIMULATE THE VARIOUS VALUES THAT MIGHT BE SUBMITTED IN A MULTIVALUE PARAMETER PASSED FROM SSRS */
SET @Parameter = @Delimiter + @Parameter + @Delimiter /* BOOKEND THE PARAMETER ARRAY WITH A COMMA ON EACH END... NECESSARY IF ONLY ONE VALUE EXISTS IN THE @PARAMETER */
SELECTC.SICCODE
,C.SICCODE_TEXT
FROM#SICCODES C
JOIN /* PARSE OUT THE MULTIVALUED DELIMITED PARAMETER INTO INDIVIDUAL ROWS OF DATA */
(
SELECT DISTINCT ParamValue = LTRIM(SUBSTRING(@Parameter,N+1,CHARINDEX(@Delimiter,@Parameter,N+1)-N-1))
FROM dbo.Tally
WHERE N < LEN(@Parameter)
AND SUBSTRING(@Parameter,N,1) = @Delimiter --Notice how we find the comma
) Sub
ON C.SICCODE = Sub.ParamValue -- THIS IDENTIFIES EXACT SICCODE MATCHES
/* USE THE "LIKE" JOIN CLAUSE BELOW, INSTEAD, IF YOU NEED TO IDENTIFY DATA BY THE TEXT DESCRIPTIONS RATHER THAN BY EXPLICIT SICCODE */
-- ON C.SICCODE_TEXT LIKE Sub.ParamValue + '%' /* THIS "LIKE" JOIN TRULY MIMICKS "STARTSWITH".... */