2011-11-09 131 views
0

我有与记录的表如下SQL枢轴

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 

等。

我想是转动的ID,并产生

ID - A1 - A2 - A3 - A4 - A5 - B1 - B2 - B3 - B4 - B5 
1 - 3 - 5 - NULL - NULL - NULL - 88 - 99 - 123 - NULL - NULL 

我可以使这项工作,如果我限制它只是一种代码类型,但我不知道如何包括第二。

我试着在我的订单字段中添加A和B前缀,但是这样搞砸了订单。

任何人都可以帮忙吗?

感谢

编辑:

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 

我所试图做的是有一个,但DX100后,继续执行PROC1 - > PROC100 正是相同的代码,除了CODETYPE =参考程序而不是诊断

回答

0

看看外部应用,here就是一个很好的例子。

+0

那不是完全是我对不起..我已经更新我的职务与我”的代码后,我与...合作 – Matt

0

您不能直接使用两列作为旋转表的列名称的源。但是你可以将它们串联在源表中,像这样的(如果我正确理解你的意图):

SELECT 
    ID, 
    DX1 , DX2 , DX3 , DX4 , DX5 , DX6 , DX7 , DX8 , DX9 , DX10, 
    DX11, DX12, DX13, DX14, DX15, DX16, DX17, DX18, DX19, DX20, 
    DX21, DX22, DX23, DX24, DX25, DX26, DX27, DX28, DX29, DX30, 
    DX31, DX32, DX33, DX34, DX35, DX36, DX37, DX38, DX39, DX40, 
    DX41, DX42, DX43, DX44, DX45, DX46, DX47, DX48, DX49, DX50, 
    DX51, DX52, DX53, DX54, DX55, DX56, DX57, DX58, DX59, DX60, 
    DX61, DX62, DX63, DX64, DX65, DX66, DX67, DX68, DX69, DX70, 
    DX71, DX72, DX73, DX74, DX75, DX76, DX77, DX78, DX79, DX80, 
    DX81, DX82, DX83, DX84, DX85, DX86, DX87, DX88, DX89, DX90, 
    DX91, DX92, DX93, DX94, DX95, DX96, DX97, DX98, DX99, DX100, 
    PROC1 , PROC2 , PROC3 , PROC4 , PROC5 , PROC6 , PROC7 , PROC8 , PROC9 , PROC10, 
    PROC11, PROC12, PROC13, PROC14, PROC15, PROC16, PROC17, PROC18, PROC19, PROC20, 
    PROC21, PROC22, PROC23, PROC24, PROC25, PROC26, PROC27, PROC28, PROC29, PROC30, 
    PROC31, PROC32, PROC33, PROC34, PROC35, PROC36, PROC37, PROC38, PROC39, PROC40, 
    PROC41, PROC42, PROC43, PROC44, PROC45, PROC46, PROC47, PROC48, PROC49, PROC50, 
    PROC51, PROC52, PROC53, PROC54, PROC55, PROC56, PROC57, PROC58, PROC59, PROC60, 
    PROC61, PROC62, PROC63, PROC64, PROC65, PROC66, PROC67, PROC68, PROC69, PROC70, 
    PROC71, PROC72, PROC73, PROC74, PROC75, PROC76, PROC77, PROC78, PROC79, PROC80, 
    PROC81, PROC82, PROC83, PROC84, PROC85, PROC86, PROC87, PROC88, PROC89, PROC90, 
    PROC91, PROC92, PROC93, PROC94, PROC95, PROC96, PROC97, PROC98, PROC99, PROC100 
FROM (
    SELECT 
    FIC.ID, 
    Code = ISNULL(Code.Code, '  ') Code, 
    CodingOrder = 
     CASE FIC.CodeType WHEN 'DIAGN' THEN 'DX' WHEN 'PROCE' THEN 'PROC' END + 
     CAST(FIC.DWHCodingLineOrder AS varchar(20)) 
     /* CodingOrder is now not just 1, 2, 3 etc. 
     but 'DX1', 'DX2', … 'PROC1', 'PROC2', … */ 
    FROM FIC 
    INNER JOIN DimCode AS Code WITH(NOLOCK) ON FIC.CodeId = Code.CodeId 
    WHERE FIC.ArchiveFlag = 0 AND FIC.CodeType IN ('DIAGN', 'PROCE') 
) AS SourceTable 
PIVOT (
    MAX(DiagCode) 
    FOR CodingOrder IN (
    DX1 , DX2 , DX3 , DX4 , DX5 , DX6 , DX7 , DX8 , DX9 , DX10, 
    DX11, DX12, DX13, DX14, DX15, DX16, DX17, DX18, DX19, DX20, 
    DX21, DX22, DX23, DX24, DX25, DX26, DX27, DX28, DX29, DX30, 
    DX31, DX32, DX33, DX34, DX35, DX36, DX37, DX38, DX39, DX40, 
    DX41, DX42, DX43, DX44, DX45, DX46, DX47, DX48, DX49, DX50, 
    DX51, DX52, DX53, DX54, DX55, DX56, DX57, DX58, DX59, DX60, 
    DX61, DX62, DX63, DX64, DX65, DX66, DX67, DX68, DX69, DX70, 
    DX71, DX72, DX73, DX74, DX75, DX76, DX77, DX78, DX79, DX80, 
    DX81, DX82, DX83, DX84, DX85, DX86, DX87, DX88, DX89, DX90, 
    DX91, DX92, DX93, DX94, DX95, DX96, DX97, DX98, DX99, DX100, 
    PROC1 , PROC2 , PROC3 , PROC4 , PROC5 , PROC6 , PROC7 , PROC8 , PROC9 , PROC10, 
    PROC11, PROC12, PROC13, PROC14, PROC15, PROC16, PROC17, PROC18, PROC19, PROC20, 
    PROC21, PROC22, PROC23, PROC24, PROC25, PROC26, PROC27, PROC28, PROC29, PROC30, 
    PROC31, PROC32, PROC33, PROC34, PROC35, PROC36, PROC37, PROC38, PROC39, PROC40, 
    PROC41, PROC42, PROC43, PROC44, PROC45, PROC46, PROC47, PROC48, PROC49, PROC50, 
    PROC51, PROC52, PROC53, PROC54, PROC55, PROC56, PROC57, PROC58, PROC59, PROC60, 
    PROC61, PROC62, PROC63, PROC64, PROC65, PROC66, PROC67, PROC68, PROC69, PROC70, 
    PROC71, PROC72, PROC73, PROC74, PROC75, PROC76, PROC77, PROC78, PROC79, PROC80, 
    PROC81, PROC82, PROC83, PROC84, PROC85, PROC86, PROC87, PROC88, PROC89, PROC90, 
    PROC91, PROC92, PROC93, PROC94, PROC95, PROC96, PROC97, PROC98, PROC99, PROC100 
) 
) DiagPivot