[英]Combining data in rows with the same key
我的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
我正在尝试合并3个Evans中学专栏,因此最终结果应类似于
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
DECLARE @tab TABLE(Guids VARCHAR(100),School VARCHAR(30),Snap INT,Tnaf INT)
INSERT INTO @tab
VALUES('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 *
FROM @tab
SELECT DISTINCT Guids
,School
,SUM(Snap) OVER(PARTITION BY Guids,School) AS TtlSnap
,SUM(Tnaf) OVER(PARTITION BY Guids,School) AS TtlTnaf
FROM @tab
ORDER BY School
CTE使用选项
;WITH cte AS
(
SELECT AdmSiteID, SiteDescription, sum(PatronCount) as SNAP, '' AS TANF
FROM FarEligibilityEnrollmentCounts JOIN ...
GROUP BY AdmSiteID, SiteDescription
UNION
SELECT AdmSiteID, SiteDescription, '' as SNAP, sum(PatronCount) AS TANF
FROM FarEligibilityEnrollmentCounts JOIN ...
GROUP BY AdmSiteID, SiteDescription
)
SELECT AdmSiteID, SiteDescription, MAX(SNAP), MAX(TANF)
FROM cte
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
SQLFiddle上的简单演示
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.