2013-03-12 24 views
1

我有以下查询来为学生生成财务援助奖励表。我们希望做一个枢轴,因为我们想同时为多个学期提供援助。数据透视表包含额外的行

select pt.award as Award, pt.[1] as Fall, pt.[2] as Spring, pt.[3] as Summer    
--into #awardTemp 
    from (select fa.Description as award, fa.OriginalAmount, fa.TextTerm, 
      ROW_NUMBER() OVER(PARTITION BY fa.description 
      order by fa.textterm) AS M 
     from CAMS_Enterprise.dbo.cams_FinancialAward_view as fa 
     where fa.Code1ID = 0 
     and fa.StudentAccepted is null 
     and fa.studentuid = @studentuid) as AT 
    pivot (max(at.originalamount) for at.m in ([1],[2],[3])) as pt 

我们没有在同一行上列出每学期的金额,我们得到的结果如下所示。即使说明标题相同,每个学期的奖项也都有自己的一排。任何人都知道问题来自哪里?

Academic Scholarship    5000.00 NULL NULL 
Academic Scholarship    NULL 5000.00 NULL 
Federal Subsidized Stafford Loan 1750.00 NULL NULL 
Federal Subsidized Stafford Loan NULL 1750.00 NULL 
Federal Unsubsidized Stafford Loan 1000.00 NULL NULL 
Federal Unsubsidized Stafford Loan NULL 1000.00 NULL 
+0

当您刚刚运行select pt。*时会发生什么?这将显示你为什么得到重复。 – 2013-03-12 19:05:51

回答

3

没有pivot之前,从表中看到您的资料,我会猜想,这是由于在查询中包含的fa.TextTerm

这给出了造成多行的不同值TextTerm

这似乎是问题的明显原因,因为您在最终的SELECT列表中未使用该列。我建议将您的查询改为:

select pt.award as Award, pt.[1] as Fall, pt.[2] as Spring, pt.[3] as Summer    
--into #awardTemp 
from 
(
    select fa.Description as award, 
     fa.OriginalAmount, 
     ROW_NUMBER() OVER(PARTITION BY fa.description order by fa.textterm) AS M 
    from CAMS_Enterprise.dbo.cams_FinancialAward_view as fa 
    where fa.Code1ID = 0 
     and fa.StudentAccepted is null 
     and fa.studentuid = @studentuid 
) as AT 
pivot 
(
    max(at.originalamount) 
    for at.m in ([1],[2],[3]) 
) as pt 
+0

太棒了!这正是我需要的。谢谢,我一直在考虑这个问题约2个小时,这让我发疯。 – hobbsb89 2013-03-12 19:13:22

相关问题