• If it fixed number of columns classic cross tab should work:

    CREATE TABLE #Temp([File] INT, Main INT, Sub CHAR(2), [Text] VARCHAR(20));

    INSERT INTO #Temp ([File], Main, Sub, [Text])

    VALUES (1, 1, 'A.', 'hello'),

    (1, 1, 'B.', 'SQL'),

    (5, 1, 'A.', 'central'),

    (5, 1, 'B.', '.com');

    SELECT

    [File]

    ,Main

    ,[A.] = MAX(CASE WHEN Sub = 'A.' THEN [Text] END)

    ,[B.] = MAX(CASE WHEN Sub = 'B.' THEN [Text] END)

    FROM #Temp

    GROUP BY [File], Main;

    DROP TABLE #Temp;

    --Vadim R.