对于外面的某个人(手指交叉!),这可能是一个简单的问题。我有一张桌子,上面有这样的数据:
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个人口统计类别。)我想知道有一种“简便”的方法可以将类别行旋转为列而不必键入每个列。单。一个?
答案 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报表。