由于多个行业代码与给定邮政编码的业务相匹配,因此我有一个商家名称与邮政编码的一对多关系的表格。一个单独的表格按邮政编码包含住户。为了按照商业名称对一系列邮政编码没有重复的家庭进行求和,我查询:
SELECT DBAName,SUM(Households)OVER(PARTITION BY ZIPCode)AS SumHouseholds
从事业务
加入位置
ON Location.ZIPCode = Business.ZIPCode
其中ZIPCode喜欢'1001%'和DBAName ='ABC Plumbing'
GROUP BY DBAName,ZIPCode,Households
订购SumHouseholds Desc
得到:
行DBAName SumHouseholds
1 ABC水暖30
2 ABC管道25
3 ABC Plumbing 5
每行代表该范围内的不同邮政编码,以及其重复数据删除的住户总和。但是,我想将SumHouseholds与那些行= 60相加。当我尝试为此嵌套SELECT语句时:
SELECT DBAName,SUM(SumHouseholds)AS TotalHouseholds FROM(
SELECT DBAName,SUM(Households)OVER(PARTITION BY ZIPCode)AS SumHouseholds
从事业务
加入位置
ON Location.ZIPCode = Business.ZIPCode
在哪里ZIPCode喜欢'1001%'和DBAName ='ABC Plumbing')
GROUP BY DBAName
按总户数订购
它返回所有匹配记录与重复项的家庭总和。由于3条记录与每个邮政编码的查询匹配,因此结果为30x3 + 25x3 + 5x3 = 180。
如何更改查询以返回SUM(SumHouseholds)= 60?
答案 0 :(得分:1)
尝试以下
SELECT DBAName, SUM(SumHouseholds) AS TotalHouseholds
FROM (
SELECT DBAName, ZIPCode, SUM(Households) AS SumHouseholds
FROM Business
JOIN Location
ON Location.ZIPCode = Business.ZIPCode
//WHERE ZIPCode LIKE '1001%' AND DBAName = 'ABC Plumbing'
GROUP BY DBAName, ZIPCode
)
GROUP BY DBAName
ORDER BY TotalHouseholds