0

历史:系统在投入生产之前已经经历了 1 到 19 次左右的状态。我需要构建一个报告,显示系统通过状态的日期,如果系统没有通过状态,则为 NA。

要求:报告需要看起来像这样:

System      Initial     Operations  PIM_Assigned    PIM_Complete    Database    Application 
Server001   9/1/2011    NA          9/2/2011        NA              NA          9/1/2011
Server002   9/10/2011   NA          9/5/2011        9/25/2011       NA          9/9/2011
Server003   9/21/2011   9/22/2011   NA              NA              9/24/2011   NA
Server004   9/23/2011   9/19/2011   9/23/2011       9/20/2011       9/23/2011   9/1/2011

以下是带有示例数据转储的查询(转储与上面不匹配 - 以上仅用于说明目的):

选择状态,转换(varchar,有效日期,101) e,系统名称  
来自 si_statushistory
其中系统名称='SERVER052'  
按 e desc 排序,history_id desc

我的查询的输出如下所示:

PSI            09/09/2011   SERVER052  
Application    09/09/2011   SERVER052  
Operations     09/09/2011   SERVER052  
Application    07/14/2011   SERVER052  
Operations     07/13/2011   SERVER052  
Operations     07/13/2011   SERVER052  
PSI            07/13/2011   SERVER052  
PIM Assigned   06/08/2011   SERVER052  
PSI            06/08/2011   SERVER052  
SD_Verify      01/15/2012   SERVER052  
PSI Operations 01/08/2012   SERVER052  
Frame Team     01/01/2011   SERVER052

ONE 行的示例:

something is missing here

我希望这很清楚并且有意义...

该页面正在使用 Coldfusion 显示,如果这样更容易构建,我可以使用数组和结构。关键时刻,这就是我寻求帮助的原因。我可以做到这一点,但我迟早需要它。

4

1 回答 1

0
CREATE PROCEDURE dbo.ReturnPivotedSystemInfo
AS
BEGIN
    SET NOCOUNT ON;

    ;WITH x AS
    (
        SELECT 
            [system] = systemname, 
            [status], 
            ed = CONVERT(CHAR(10), effectivedate, 101), -- not varchar w/o length
            rn = ROW_NUMBER() OVER 
                (PARTITION BY systemname, status ORDER BY effectivedate DESC)
        FROM dbo.si_statushistory
        -- where clause here
    )
    SELECT [system], 
        Initial      = COALESCE(MAX(CASE WHEN [status] = 'Initial'      THEN ed END), 'NA'),
        Operations   = COALESCE(MAX(CASE WHEN [status] = 'Operations'   THEN ed END), 'NA'),
        PIM_Assigned = COALESCE(MAX(CASE WHEN [status] = 'PIM Assigned' THEN ed END), 'NA')
        --, repeat for other possible values of status
    FROM x
    WHERE rn = 1
    GROUP BY [system];
END
GO

现在您的 ColdFusion 只需要执行存储过程dbo.ReturnPivotedSystemInfo,从那里它应该能够表现得就像您调用了SELECT * FROM sometable...

于 2011-09-22T16:57:21.527 回答