I've got a table with records as follows
  ID - Type - Code - Order
  1  - A - 3  - 1
  1  - A - 5  - 2
  1  - B - 88  -1
  1  - B - 99  -2
  1  - B - 123 -3
  2  - A - 7  - 1
  2  - A - 6  - 2
  2  - A - 1  - 3
  2  - A - 8  - 4
etc..
What I want is to pivot on ID, and produce
ID - A1 - A2 -  A3  -  A4  -  A5  - B1 - B2 - B3  -  B4  -  B5
1  - 3  - 5  - NULL - NULL - NULL - 88 - 99 - 123 - NULL - NULL
etc..
I can make this work if I restrict it to just one code type, but I can't figure out how to include a second.
I tried prefixing my Order field with an A and B, but this screwed up the ordering.
EDIT:
SELECT  [ID], 
[1]  AS DX1 ,[2]  AS DX2 ,[3]  AS DX3 ,[4]  AS DX4 ,[5]  AS DX5 ,[6]  AS DX6 ,[7]  AS DX7 ,[8]  AS DX8 ,[9]  AS DX9 ,[10] AS DX10,
[11] AS DX11,[12] AS DX12,[13] AS DX13,[14] AS DX14,[15] AS DX15,[16] AS DX16,[17] AS DX17,[18] AS DX18,[19] AS DX19,[20] AS DX20,
[21] AS DX21,[22] AS DX22,[23] AS DX23,[24] AS DX24,[25] AS DX25,[26] AS DX26,[27] AS DX27,[28] AS DX28,[29] AS DX29,[30] AS DX30,
[31] AS DX31,[32] AS DX32,[33] AS DX33,[34] AS DX34,[35] AS DX35,[36] AS DX36,[37] AS DX37,[38] AS DX38,[39] AS DX39,[40] AS DX40,
[41] AS DX41,[42] AS DX42,[43] AS DX43,[44] AS DX44,[45] AS DX45,[46] AS DX46,[47] AS DX47,[48] AS DX48,[49] AS DX49,[50] AS DX50,
[51] AS DX51,[52] AS DX52,[53] AS DX53,[54] AS DX54,[55] AS DX55,[56] AS DX56,[57] AS DX57,[58] AS DX58,[59] AS DX59,[60] AS DX60,
[61] AS DX61,[62] AS DX62,[63] AS DX63,[64] AS DX64,[65] AS DX65,[66] AS DX66,[67] AS DX67,[68] AS DX68,[69] AS DX69,[70] AS DX70,
[71] AS DX71,[72] AS DX72,[73] AS DX73,[74] AS DX74,[75] AS DX75,[76] AS DX76,[77] AS DX77,[78] AS DX78,[79] AS DX79,[80] AS DX80,
[81] AS DX81,[82] AS DX82,[83] AS DX83,[84] AS DX84,[85] AS DX85,[86] AS DX86,[87] AS DX87,[88] AS DX88,[89] AS DX89,[90] AS DX90,
[91] AS DX91,[92] AS DX92,[93] AS DX93,[94] AS DX94,[95] AS DX95,[96] AS DX96,[97] AS DX97,[98] AS DX98,[99] AS DX99,[100] AS DX100
FROM(
SELECT
    FIC.[ID]
    ,ISNULL(Code.Code, '     ') Code
    ,FIC.[DWHCodingLineOrder] AS CodingOrder
FROM  FIC
INNER JOIN DimCode AS Code WITH(NOLOCK) ON FIC.CodeId = Code.CodeId
WHERE FIC.ArchiveFlag = 0 AND FIC.[CodeType] = 'DIAGN'
) AS SourceTable
PIVOT
(
    MAX(DiagCode)
    FOR DiagCodingOrder IN (
    [1] ,[2] ,[3] ,[4] ,[5] ,[6] ,[7] ,[8] ,[9] ,[10],
    [11],[12],[13],[14],[15],[16],[17],[18],[19],[20],
    [21],[22],[23],[24],[25],[26],[27],[28],[29],[30],
    [31],[32],[33],[34],[35],[36],[37],[38],[39],[40],
    [41],[42],[43],[44],[45],[46],[47],[48],[49],[50],
    [51],[52],[53],[54],[55],[56],[57],[58],[59],[60],
    [61],[62],[63],[64],[65],[66],[67],[68],[69],[70],
    [71],[72],[73],[74],[75],[76],[77],[78],[79],[80],
    [81],[82],[83],[84],[85],[86],[87],[88],[89],[90],
    [91],[92],[93],[94],[95],[96],[97],[98],[99],[100])
)AS DiagPivot
What I am trying to do is have that, but after DX100, proceed to PROC1 -> PROC100 It is exactly the same code, except CodeType = Proce instead of Diagn