1. sqlServer中SQL語句如何對兩個group By後的查詢結果進行相除
你錯誤的問題點在於兩個子查詢之間沒有任何關聯,不能直接除。首先我們要建立關聯關系。再除
select a.值1,(case when isnull(b.值2,0)=0 then 0 else a.值1/b.值2) ---記得除數為0處理
from (select 值2,SUM(值1) AS 值1 from 表1 group by 值2) a
innor join (看情況使用innor join 還是 full 還是Left)
(select 值2,sum(值1) AS 值1 from 表2 group by 值2) b on A.值2=b.值2
2. sqlserver里取兩個整數相除的百分比,小數點後保留2位用什麼函數
1.round() 函數是四捨五入用,第一個參數是我們要被操作的數據,第二個參數是設置我們四捨五入之後小數點後顯示幾位。
2.numeric 函數的2個參數,第一個表示數據長度,第二個參數表示小數點後位數。
例如:
select cast(round(12.5,2) as numeric(5,2)) 結果:12.50
select cast(round(12.555,2) as numeric(5,2)) 結果:12.56
select cast(round(122.5255,2) as numeric(5,2)) 結果:122.53
select cast(round(1222.5255,2) as numeric(5,2)) 結果:報錯了! 原因是:1222.5255,整數位是4,小數位是2,加起來4+2=6,超出了numeric設置的5位,所以為了保險,可以增減numeric的參數,例如numeric(20,2)。
3. sql server 簡單的除法運算
用一個SQL求出來就可以了
select sum(case s when b the 1 else 0 end)/sum(case s when b then 0 else 1 end ) as result from t
但要判斷一下除數是否為0的情況,就要寫成這樣:
select case when sum(case s when b then 0 else 1 end )=0 then 0 else sum(case s when b the 1 else 0 end)/sum(case s when b then 0 else 1 end ) end as result from t
如果除數是0,結果返回0
4. SQL除數為0怎麼解決
這樣一個情況
select * from a where c>0 and (b/c)>0.5 and (b/c)<0.6
這樣一條語句,由於b,c是二個數值列,裡面記錄的是金額,而c 的話有可能為0,那麼這時我們雖然加上了c>0這個條件,卻仍有可能 出現 遇到以零作除數錯誤 這個錯誤.
解決這個問題,有二種方法,一種是自己加個函數 發覺c=0時,將c改成1 ;如 b/checkdata(c)<0.6
另一種方式 則是使用sqlserver 的選項來禁止出現以零除的錯誤中斷,讓而讓其為null
set ansi_warnings off
SET ARITHABORT off
SET ARITHIGNORE on
select * from a where c>0 and (b/c)>0.5 and (b/c)<0.6
如果一來,當執行時,遇到某條記錄里為0時,則二數相除為null,而null<0.6這個是不成立的,從而達到了作為條件的目的.
5. sql相除的問題
SELECT field1/field2 FROM TB;
當 field1的數值 > field2的數值時,除法得出的結果是<1的,即0.xxxxxx
這個時候在DB2的環境下SELECT出來的值是0
解決方法:
先把field1轉換成DOUBLE類型的,這樣計算出來的就會得出小數點了,會顯示出0.xxxx
SELECT CAST(field1 AS FLOAT)/field2 FROM TB;
ps.網上搜的資料,寫的是double,但在SQL Server2008中一直報錯,改成FLOAT就沒問題了。
小數點顯示4位小數。可以進一步四捨五入,保留兩位小數點
SELECT ROUND(CAST(field1 AS DOUBLE)/field2, 2) FROM TB;
如果數據列的值為NULL,將其設置為0,那麼sql就要這么寫
SELECT ROUND(COALESCE(CAST(field1 AS DOUBLE), 0)/field2, 2) FROM TB;
COALESCE這個函數系統的用法如下:
a. 輸入參數為字元類型,且允許為空的,可以使用COALESCE(inputParameter,」)把NULL轉換成」;
b. 輸入類型為整型,且允許為空的,可以使用COALESCE(inputParameter,0),把空轉換成0;
c. 輸入參數為字元類型,且是非空非空格的,可以使用COALESCE(inputParameter,」)把NULL轉換成」,然後判斷函數返回值是否為」;
d. 輸入類型為整型,且是非空的,不需要使用COALESCE函數,直接使用IS NULL進行非空判斷。
6. sql server 2008 整數相除四捨五入
sql server 2008 整數相除需要除數或被除數有一個數據類型為小數,才可以四捨五入。
首先看一個例子,如圖:
兩條語句唯一區別就是 10 與 10.00
1、select cast(round(10/6,0) as int) 結果:1
2、select cast(round(10.00/6,0) as int) 結果:2
但結果確不一樣。
原因是SQLserver有默認的數據類型轉換。
10/6 默認轉換為整型 即:10/6 = 1。那麼 round(1) = 1
10.00/6 默認轉換為小數即:10.00/6 = 1.666666 ,那麼 round(1.666666,0) = 2
7. SQL 兩整數相除,取小數點後兩位
用函數ROUND(欄位,精度)SqlServer Oracle通用
8. sqlserver怎麼進行整數的移位運算
SQL SERVER
查看所有表名:
select name from sysobjects where type='U'
查詢表的所有欄位名:
Select name from syscolumns Where ID=OBJECT_ID('表名')
select * from information_schema.tables
select * from information_schema.views
select * from information_schema.columns
ACCESS
查看所有表名:
select name from MSysObjects where type=1 and flags=0
MSysObjects是系統對象,默認情況是隱藏的。通過工具、選項、視圖、顯示、系統對象可以使之顯示出來。
Oracle
select cname from col where tname='ZW_YINGYEZ'
select column_name from user_tab_columns where table_name='ZW_YINGYEZ'
查詢表欄位數
select count(column_name) from user_tab_columns where table_name='表名'
9. sql server 簡單的除法運算規程
select (select count(*) as y from t where s='b')
(select count(*) as n from t where s!='b')
在SqlServer默認當做int類型,兩個int變數相除得到的還是個int類型 ,所以只要把其中一個改成小數類型的就可以得到你要的結果了。