所以我有这张桌子:
列表示房屋类型,数量和RegionName。我需要构建一个查询,它返回每个区域中某个房屋类型的百分比,如下所示:
nomRegion tipo Prct
Central Casa independiente 23.5
brunca Casa independiente 54.7
chorotega Casa independiente 12.4
.... Casa independiente ....
我需要自己加入桌子,以获得每个地区所需类型的房屋数量,然后除以每个地区的房屋总数。我尝试编写此查询,但它在所有百分比字段中返回0。
select T.nomRegion, T.Tipo, (T.Cantidad/SUM(V.Cantidad))*100
from dbo.TipoVivienda T join dbo.TipoVivienda V on T.nomRegion = V.nomRegion
where T.Tipo = 'Casa independiente'
group by T.nomRegion, T.Tipo, T.Cantidad
我尝试过其他变体,基于这个问题:SQL issue: Calculating percentages and using multiple joins to the same table
select T.nomRegion, T.Tipo, 100 * (T.Cantidad/V.Cantidad)
from dbo.TipoVivienda T inner join (select nomRegion as nomRegion, SUM(Cantidad) as Cantidad
from dbo.TipoVivienda
group by nomRegion) V on T.nomRegion = V.nomRegion
where T.Tipo = 'Casa independiente'
group by T.NomRegion, T.Tipo, T.Cantidad, V.Cantidad
但是查询仍然以所有区域的百分比形式返回0。不知道我在这里做错了什么...... 我使用相关查询尝试了另一种查询变体,但结果是相同的:
select T.nomRegion, T.Tipo, (T.Cantidad / (select SUM(V.cantidad)
from dbo.TipoVivienda V
where V.nomRegion = T.nomRegion
group by V.nomRegion))*100
from dbo.TipoVivienda T
where T.tipo = 'Casa independiente'
有什么想法吗?
答案 0 :(得分:4)
与1.0一起得到正确的结果,因为sql server执行整数运算。
(T.Cantidad*1.0/SUM(V.Cantidad))*100
或首先乘以100然后再进行除法。
T.Cantidad*100.0/SUM(V.Cantidad)