部分透视数据?

时间:2018-10-22 21:43:05

标签: pivot unpivot

对于外面的某个人(手指交叉!),这可能是一个简单的问题。我有一张桌子,上面有这样的数据:

syr  dst  sch  category     iep ell section504  Hispanic  Asian White etc etc
1718 001  158  overallboys   18  9               25             72   
1718 001  158  overall girls  9  1       2       21          2  70
1718 001  158  LEP-boys       2                   9      
1718 001  158  LEP-girls      1  15              12          2   1
1718 001  158  TAG- boys                          1              1
1718 001  158  TAG- girls                         2              3 

然后继续进行另外143行数据。如果可能的话,我想保留此表的结构,但是我需要(使用Argos)将这些数据“扁平化”为每所学校的一条LOOOONG数据行,并导出到csv中以上传到联邦调查局(民权报告)。所以上面的数据看起来像这样:

syr  dst  sch  overallboys_iep   overallboys_ell  overallboys_section504   overallboys_Hispanic  overallboys_Asian  overallboys_white  overallgirls_iep   overallgirls_ell  overallgirls_section504   overallgirls_Hispanic  overallgirls_Asian  overallgirls_White LEPboys_iep   LEPboys_ell  LEPboys_Section504  LEPboys_Hispanic  LEPboys_Asian  LEPboys_White
1819 001 158    18                9                                              25                                        72           9                    1                2

然后继续。最终达到了大约1600列(149个类别/注册类型的类别x 11个人口统计类别。)我想知道有一种“简便”的方法可以将类别行旋转为列而不必键入每个列。单。一个?

1 个答案:

答案 0 :(得分:0)

做到了:

DECLARE @cols AS NVARCHAR(MAX),
@query  AS NVARCHAR(MAX);

SET @cols = STUFF((select ',' + QUOTENAME( c.ff_name) field                 
        FROM i5_school_profile_crdc_Fields c
        WHERE sort < 788
        ORDER BY sort
        FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'')

 set @query = 
'SELECT GETDATE() date_loaded, 1718 syr, p.dst,sch, ' + (@cols)+ ' from 
        (
            select dst, sch, value
                , ff_name  field
            from i5_school_profile_crdc_upload 
            WHERE dst = '+ :parm_DD_District.district + ' 


       ) x
        pivot 
        (
             max(value)
            for field in (' + @cols + ')
        ) p '


exec(@query)

因为我在Argos工作,所以我只是将其用作报表查询,并且将其用作csv报表。