Sql 使用相同的键组合行中的数据

Sql 使用相同的键组合行中的数据,sql,sql-server,tsql,sql-server-2008-r2,Sql,Sql Server,Tsql,Sql Server 2008 R2,我的sql语句如下所示 SELECT fe.AdmSiteID,A.SiteDescription, '' AS SNAP, '' AS TANF, '' AS Foster, '' AS FDPIR, '' AS Homeless, '' AS Migrant, '' AS Runaway, '' AS HeadStart, '' AS EvenStart, '' AS DirectCertified, '' AS NoApplicat

我的sql语句如下所示

SELECT fe.AdmSiteID,A.SiteDescription, 
        '' AS SNAP, ''  AS TANF, '' AS Foster, ''   AS FDPIR, ''    AS Homeless, '' AS Migrant, ''  AS Runaway, 
        '' AS HeadStart, '' AS EvenStart, ''    AS DirectCertified,  '' AS NoApplication, '' AS FreeIncome, '' AS ReducedIncome, 
        ''  AS RefusedBenefits,''   AS DeniedIncome, '' AS DeniedVerification,  ''  AS DeniedNotValid, ''   AS TempFreeGrace, ''    AS TempReducedGrace, 
        ''  AS DeniedInactive, ''   AS DNQ, '' AS ExpiredGrace 
FROM FarEligibilityEnrollmentCounts fe 
inner join AdmSites A on fe.AdmSiteID = A.AdmSiteID 
GROUP BY fe.AdmSiteID,A.SiteDescription 
union
select fe.AdmSiteID,A.SiteDescription,sum(PatronCount) as SNAP, ''  AS TANF, '' AS Foster, ''   AS FDPIR, ''    AS Homeless, '' AS Migrant, ''  AS Runaway, 
        '' AS HeadStart, '' AS EvenStart, ''    AS DirectCertified,  '' AS NoApplication, '' AS FreeIncome, '' AS ReducedIncome, 
        ''  AS RefusedBenefits,''   AS DeniedIncome, '' AS DeniedVerification,  ''  AS DeniedNotValid, ''   AS TempFreeGrace, ''    AS TempReducedGrace, 
        ''  AS DeniedInactive, ''   AS DNQ, '' AS ExpiredGrace
        from FarEligibilityEnrollmentCounts fe 
        inner join AdmSites A on fe.AdmSiteID = A.AdmSiteID 
        where fe.FarStudentCaseID = '4FA4AED1-75C9-4CB4-9FF2-102C2D964CC1'
        Group BY fe.AdmSiteID,A.SiteDescription       
union 
select fe.AdmSiteID,A.SiteDescription,'' as SNAP, sum(PatronCount)  AS TANF, '' AS Foster, ''   AS FDPIR, ''    AS Homeless, '' AS Migrant, ''  AS Runaway, 
        '' AS HeadStart, '' AS EvenStart, ''    AS DirectCertified,  '' AS NoApplication, '' AS FreeIncome, '' AS ReducedIncome, 
        ''  AS RefusedBenefits,''   AS DeniedIncome, '' AS DeniedVerification,  ''  AS DeniedNotValid, ''   AS TempFreeGrace, ''    AS TempReducedGrace, 
        ''  AS DeniedInactive, ''   AS DNQ, '' AS ExpiredGrace
        from FarEligibilityEnrollmentCounts fe 
        inner join AdmSites A on fe.AdmSiteID = A.AdmSiteID 
        where fe.FarStudentCaseID = 'B348D33C-5C32-4CFE-B508-1E0CE2A9D428'
        Group BY fe.AdmSiteID,A.SiteDescription 
AE1EF8E3-A093-410D-A02A-2B6DB334C758    Dowell Middle School    0       0
0359AF48-882F-4D54-B39D-341B17D64403    Evans Middle School     0       0
0359AF48-882F-4D54-B39D-341B17D64403    Evans Middle School     0       1595
0359AF48-882F-4D54-B39D-341B17D64403    Evans Middle School     1045    0
查询返回的数据如下所示

SELECT fe.AdmSiteID,A.SiteDescription, 
        '' AS SNAP, ''  AS TANF, '' AS Foster, ''   AS FDPIR, ''    AS Homeless, '' AS Migrant, ''  AS Runaway, 
        '' AS HeadStart, '' AS EvenStart, ''    AS DirectCertified,  '' AS NoApplication, '' AS FreeIncome, '' AS ReducedIncome, 
        ''  AS RefusedBenefits,''   AS DeniedIncome, '' AS DeniedVerification,  ''  AS DeniedNotValid, ''   AS TempFreeGrace, ''    AS TempReducedGrace, 
        ''  AS DeniedInactive, ''   AS DNQ, '' AS ExpiredGrace 
FROM FarEligibilityEnrollmentCounts fe 
inner join AdmSites A on fe.AdmSiteID = A.AdmSiteID 
GROUP BY fe.AdmSiteID,A.SiteDescription 
union
select fe.AdmSiteID,A.SiteDescription,sum(PatronCount) as SNAP, ''  AS TANF, '' AS Foster, ''   AS FDPIR, ''    AS Homeless, '' AS Migrant, ''  AS Runaway, 
        '' AS HeadStart, '' AS EvenStart, ''    AS DirectCertified,  '' AS NoApplication, '' AS FreeIncome, '' AS ReducedIncome, 
        ''  AS RefusedBenefits,''   AS DeniedIncome, '' AS DeniedVerification,  ''  AS DeniedNotValid, ''   AS TempFreeGrace, ''    AS TempReducedGrace, 
        ''  AS DeniedInactive, ''   AS DNQ, '' AS ExpiredGrace
        from FarEligibilityEnrollmentCounts fe 
        inner join AdmSites A on fe.AdmSiteID = A.AdmSiteID 
        where fe.FarStudentCaseID = '4FA4AED1-75C9-4CB4-9FF2-102C2D964CC1'
        Group BY fe.AdmSiteID,A.SiteDescription       
union 
select fe.AdmSiteID,A.SiteDescription,'' as SNAP, sum(PatronCount)  AS TANF, '' AS Foster, ''   AS FDPIR, ''    AS Homeless, '' AS Migrant, ''  AS Runaway, 
        '' AS HeadStart, '' AS EvenStart, ''    AS DirectCertified,  '' AS NoApplication, '' AS FreeIncome, '' AS ReducedIncome, 
        ''  AS RefusedBenefits,''   AS DeniedIncome, '' AS DeniedVerification,  ''  AS DeniedNotValid, ''   AS TempFreeGrace, ''    AS TempReducedGrace, 
        ''  AS DeniedInactive, ''   AS DNQ, '' AS ExpiredGrace
        from FarEligibilityEnrollmentCounts fe 
        inner join AdmSites A on fe.AdmSiteID = A.AdmSiteID 
        where fe.FarStudentCaseID = 'B348D33C-5C32-4CFE-B508-1E0CE2A9D428'
        Group BY fe.AdmSiteID,A.SiteDescription 
AE1EF8E3-A093-410D-A02A-2B6DB334C758    Dowell Middle School    0       0
0359AF48-882F-4D54-B39D-341B17D64403    Evans Middle School     0       0
0359AF48-882F-4D54-B39D-341B17D64403    Evans Middle School     0       1595
0359AF48-882F-4D54-B39D-341B17D64403    Evans Middle School     1045    0
我正在尝试合并埃文斯中学的3个专栏,这样最终的结果应该是

AE1EF8E3-A093-410D-A02A-2B6DB334C758    Dowell Middle School    0       0
0359AF48-882F-4D54-B39D-341B17D64403    Evans Middle School     1045    1595
有办法做到这一点吗?

将选项与

select  AdmSiteID
,       SiteDescription
,       sum(SNAP) as TotalSNAP
,       sum(TANF) as TotalTANF
,       ... Other Sums Here ...
from    (
        ...  Your Query With Unions Here ...
        ) as SubQueryAlias
group by
        AdmSiteID
,       SiteDescription
此外,您还可以尝试此脚本,而无需过多的联合

select fe.AdmSiteID,A.SiteDescription,
       ISNULL(SUM(CASE WHEN fe.FarStudentCaseID = '4FA4AED1-75C9-4CB4-9FF2-102C2D964CC1' THEN PatronCount END), 0) AS SNAP,
       ISNULL(SUM(CASE WHEN fe.FarStudentCaseID = 'B348D33C-5C32-4CFE-B508-1E0CE2A9D428' THEN PatronCount END), 0) AS TANF,
       '' AS Foster, ''   AS FDPIR, ''    AS Homeless, '' AS Migrant, ''  AS Runaway, 
       '' AS HeadStart, '' AS EvenStart, ''    AS DirectCertified,  '' AS NoApplication, '' AS FreeIncome, '' AS ReducedIncome, 
       '' AS RefusedBenefits,''   AS DeniedIncome, '' AS DeniedVerification,  ''  AS DeniedNotValid, ''   AS TempFreeGrace, ''    AS TempReducedGrace, 
       '' AS DeniedInactive, ''   AS DNQ, '' AS ExpiredGrace
from FarEligibilityEnrollmentCounts fe 
  inner join AdmSites A on fe.AdmSiteID = A.AdmSiteID       
Group BY fe.AdmSiteID,A.SiteDescription
简单演示