2015-02-08 35 views
0

我總是遇到嘗試這樣的麻煩。我發現這是一種解決方案,但我很好奇它們是否是一種更好的方法。將轉換(Bigint)允許對字符串進行計算

declare @CountByZip as int 
select @CountByZip = convert(decimal(18,4),count(HouseNumbers)) 
from zipcodeDB 
Where zip is not null 

而使用這個作爲語句執行沒有問題!

Convert(decimal(18,4),Count(case when zip IN ('123', '456', '789') then zip else null end))/@CountByZip 

不過,我很好奇,如果有轉換在我的case語句來詮釋,並允許在我的例子頂部取出變量和SELECT語句的創建方式。

Convert(Bigint,Convert(decimal(18,4),Count(case when zip IN ('123', '456', '789') then zip else null end))/Count(Zip) 

然而,這將返回 的可怕SQL錯誤「錯誤轉換數據類型爲varchar到數字」 這是什麼讓我切換到我的聲明語句在頂部。

是否可以執行我的第二個例子?

+0

所有這些'converts'沒有意義。我不認爲你需要任何'convert'。嘗試簡單的表達式,不用任何「轉換」,並告訴我們你有什麼問題。 – 2015-02-08 23:04:37

+0

我在這裏使用的轉換是這樣的,它將顯示一個小數,'轉換(十進制(18,4),計數(當壓縮IN('123','456','789')然後zip另外空結束) )/ @ CountByZip'有沒有更好的方法來顯示小數? – user2676140 2015-02-09 13:00:33

+0

我不明白你想要什麼,你的問題是什麼。換句話說,試着解釋你的目標是什麼。 – 2015-02-10 06:24:22

回答

0

嘗試使用這樣的事情

cast(count(case when zip in ('123', '456', '789') then zip else null end)*1/whateveryourdividingby as decimal(10,4)) 
相關問題