• Hi, This should work for you.

    IF EXISTS (Select Name FROM Utility.sys.objects Where name ='tfnStringParser')

    BEGIN

    DROP FUNCTION dbo.tfnStringParser

    END

    GO

    CREATE FUNCTION [dbo].[tfnStringParser]

    (

    @inputString Varchar(8000),

    @Delimiter CHAR(1)

    )

    RETURNS

    @parsedValues TABLE (ParsedColumn VARCHAR(200))

    AS

    BEGIN

    DECLARE @spos INT

    DECLARE @epos INT

    IF RIGHT(@inputString,1)<> @Delimiter

    SET @inputString= @InputString + @Delimiter

    SET @spos =1

    WHILE CHARINDEX(@delimiter,@InputString,@spos) <> 0

    BEGIN

    SET @epos=CHARINDEX(@delimiter,@inputString,@spos)

    Insert into @parsedValues

    SELECT SUBSTRING(@InputString,@spos,@epos - @spos)

    SET @spos =@epos +1

    END

    RETURN

    END

    GO

    DECLARE @Columns NVARCHAR(4000)

    DECLARE @SQLstr NVARCHAR(MAX)

    SET @Columns =''

    SET @SQLstr = ''

    --Just using your example, this table could be any size.

    CREATE TABLE skill(Skill VARCHAR(15),BU1 INT,BU2 INT , BU3 INT)

    INSERT INTO skill (Skill,BU1,BU2,BU3)

    VALUES

    ('Skill1', 0, 0, 0),

    ('Skill2', 2, 6, 0),

    ('Skill3', 0, 0, 7),

    ('Skill4', 4, 0, 0),

    ('Skill5', 0, 7, 8)

    SELECT @Columns = @Columns + COLUMN_NAME +','

    FROM INFORMATION_SCHEMA.COLUMNS

    WHERE TABLE_NAME ='SKILL' and COLUMN_NAME Like 'BU%'

    SELECT @Columns= LEFT(@Columns,LEN(@Columns)-1)

    SELECT @SQLstr = @SQLstr + 'SELECT ''' +[ParsedColumn] +''',SKILL,' + [ParsedColumn] + ' as [Value] FROM Skill UNION ALL' +CHAR(13)

    FROM [Utility].[dbo].[tfnStringParser] (@Columns,',')

    SELECT @SQLStr =LEFT(@SQLStr,LEN(@SQLStr)- (LEN('UNION ALL')+1))

    EXEC(@SQLSTR)

    DROP TABLE skill