I think this reflects your table, although I am using names instead of IDs for the last two columns:    
CREATE TABLE [dbo].[Transaction](
            [TransId] [int] NOT NULL,
            [DocId] [int] NOT NULL,
            [EmpId] [nvarchar](10) NOT NULL,
            [FromToId] [nchar](10) NOT NULL
) ON [PRIMARY]
INSERT INTO [Transaction] ([TransId],[DocId],[EmpId],[FromToId])VALUES(1,1,'Jo','From')
INSERT INTO [Transaction] ([TransId],[DocId],[EmpId],[FromToId])VALUES(2,1,'Fo','To')
INSERT INTO [Transaction] ([TransId],[DocId],[EmpId],[FromToId])VALUES(3,1,'Do','CC')
INSERT INTO [Transaction] ([TransId],[DocId],[EmpId],[FromToId])VALUES(4,2,'Jo','From')
INSERT INTO [Transaction] ([TransId],[DocId],[EmpId],[FromToId])VALUES(5,2,'Bo','To')
INSERT INTO [Transaction] ([TransId],[DocId],[EmpId],[FromToId])VALUES(6,2,'Zo','CC')
INSERT INTO [Transaction] ([TransId],[DocId],[EmpId],[FromToId])VALUES(7,3,'Bo','From')
INSERT INTO [Transaction] ([TransId],[DocId],[EmpId],[FromToId])VALUES(8,3,'Go','To')
Then this query will give you the results you requested:
SELECT DISTINCT
       t.DocId
      ,x.[From]
      ,y.[To]
      ,z.Cc
FROM [Transaction] t
LEFT JOIN 
(
    SELECT DocId 
   ,CASE WHEN FromToId = 'From' THEN EmpId END AS [From]
    FROM [Transaction]
    WHERE CASE WHEN FromToId = 'From' THEN EmpId END IS NOT NULL
) x ON t.DocId = x.DocId 
LEFT JOIN 
(
    SELECT DocId 
   ,CASE WHEN FromToId = 'To'   THEN EmpId END AS [To]
    FROM [Transaction]
    WHERE CASE WHEN FromToId = 'To'   THEN EmpId END IS NOT NULL
) y ON t.DocId = y.DocId 
LEFT JOIN 
(
    SELECT DocId 
   ,CASE WHEN FromToId = 'CC'   THEN EmpId END AS [Cc]
    FROM [Transaction]
    WHERE CASE WHEN FromToId = 'Cc'   THEN EmpId END IS NOT NULL
) z ON t.DocId = z.DocId 
  DocId   From  To  Cc
  1       Jo    Fo  Do
  2       Jo    Bo  Zo
  3       Bo    Go  NULL