• The basic idea would be something like,

    CREATE TABLE #test_table (COL_ONE varchar(30), COL_TWO varchar(30), COL_THREE int)

    INSERT INTO #test_table

    SELECT 'test1', 'c', 1

    UNION

    SELECT 'test1', 'b', 500

    UNION

    SELECT 'test2', 'a', 2

    DECLARE @sql varchar(max),

    @col_three int

    DECLARE temp_con CURSOR FOR SELECT DISTINCT COL_THREE FROM #test_table ORDER BY COL_THREE ASC

    OPEN TEMP_CON

    SET @sql = 'SELECT COL_ONE, COL_TWO '

    FETCH NEXT FROM temp_con INTO @col_three

    WHILE @@FETCH_STATUS = 0

    BEGIN

    SET @sql = @sql + ', CASE WHEN COL_THREE = ' + CAST(@col_three AS varchar) + ' THEN 1 ELSE NULL END AS Hist_' + CAST(@col_three AS varchar)

    FETCH NEXT FROM temp_con INTO @col_three

    END

    CLOSE temp_con

    DEALLOCATE temp_con

    SET @sql = @sql + ' FROM #test_table'

    EXEC (@sql)

    DROP TABLE #test_table