2014-02-28 43 views
1

我正在寻找新账户和所有账户之间的利率变化,我列出了以下两个查询。我需要将AllAccounts除以NewAccounts,并在同一个查询中按城镇分组。由于在SQL中划分两个查询然后划分为

SELECT DISTINCT Count(NewAccounts), Town 
FROM (SELECT Stuff) 
WHERE (Newaccounts) 
Group By Town 
; 
SELECT DISTINCT Count(AllAccounts), Town 
FROM (SELECT DifferentSTUFF) 
WHERE (AllAccounts) 
Group By Town 

回答

3

你需要重写你的查询,子查询和将它们连接在一起:

SELECT CAST(na.NewAccounts AS FLOAT)/aa.AllAccounts 
FROM ( SELECT Count(NewAccounts) AS NewAccounts, Town 
      FROM (SELECT Stuff) 
      WHERE (Newaccounts) 
      GROUP BY Town 
     ) na 
     INNER JOIN 
     ( SELECT Count(AllAccounts) AS AllAccounts, Town 
      FROM (SELECT DifferentSTUFF) 
      WHERE (AllAccounts) 
      GROUP BY Town 
     ) aa 
      ON aa.Town = na.Town; 

注:我从两个查询中删除DISTINCT,因为它是多余的。浮动在NewAccounts上的转换是为了避免将结果整数除法隐式转换回整数。

您可能需要更改此略有不同数据的每个查询,即可用性,如果你不会总是有一个镇的新帐户,将更好的写法如下结果:

SELECT CAST(COALESCE(na.NewAccounts, 0) AS FLOAT)/aa.AllAccounts 
FROM  
     ( SELECT Count(AllAccounts) AS AllAccounts, Town 
      FROM (SELECT DifferentSTUFF) 
      WHERE (AllAccounts) 
      GROUP BY Town 
     ) aa 
     LEFT JOIN 
     ( SELECT Count(NewAccounts) AS NewAccounts, Town 
      FROM (SELECT Stuff) 
      WHERE (Newaccounts) 
      GROUP BY Town 
     ) na 
      ON aa.Town = na.Town 
+0

这工作完美。谢谢。我没有内在的联合征服他们。 – ColorfulWind

+0

如何将小数减少到两个地方? (我试图用decimal替换Float并且转换为cast) – ColorfulWind

+0

只需要输出完整结果以及分母或分子:CAST(CAST(COALESCE(na.NewAccounts,0)AS FLOAT)/ aa.AllAccounts AS DECIMAL(10,2))' – GarethD