2014-11-14 142 views
1

所以我有這個表:SQL計算比例加入

SQL table

列的意思是房子的種類,數量和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' 

任何想法?

+1

乘以1.0以獲得正確的結果,因爲sql不是整數算術。 (T.Cantidad * 1.0/SUM(V.Cantidad))* 100或T.Cantidad * 100.0/SUM(V.Cantidad) – radar 2014-11-14 20:17:40

回答

4

與1.0相乘以得到正確的結果,因爲sql server不進行整數算術運算。

(T.Cantidad*1.0/SUM(V.Cantidad))*100 

或先乘以100然後再進行除法。

T.Cantidad*100.0/SUM(V.Cantidad) 
+0

哇。有用!爲什麼需要這種乘法? – 2014-11-14 20:25:49

+2

@AndresBejarano,與1.0不相乘,你得到零作爲整數除法的較低數字/較高數字得到零 – radar 2014-11-14 20:29:52