现在有数据表TB9如下
ID M1 M2 M3 M4 M5 M6
1 60 43 21 34 28 60
2 42 53 22 47 28 43
3 60 51 23 46 28 61
4 60 54 24 49 28 43
5 42 47 25 42 28 61
6 51 47 26 41 28 43
7 42 43 27 39 27 61
8 42 44 28 40 27 43
9 60 52 29 48 27 61
10 51 43 30 38 27 43
11 42 45 31 37 27 61
12 42 47 32 42 27 43
13 69 55 33 48 27 61
14 51 42 34 36 27 43
15 42 49 35 40 27 61
16 51 49 36 42 27 43
17 33 47 37 42 27 61
执行以下(引用的是“ABUYING”提供的,谢谢“ABUYING” 指教)脚本
-- 加上decimal(18,2)
select ID,M1,M2,M3,M4,M5,M6
,''AS [平均数],''as [中位数],'' as [方差],cast(sqrt([方差]) as decimal(18,2)) as 标准差
from
(SELECT ID,M1,M2,M3,M4,M5,M6,cast((M1+M2+M3+M4+M5+M6)/6 as decimal(18,2)) AS [平均数]
,CAST((M3+M4)/2 as decimal(18,2)) AS [中位数]
,cast(((power((M1-[平均数]),2)+power((M2-[平均数]),2)+power((M3-[平均数]),2)+power((M4-[平均数]),2)+(power((M5-[平均数]),2)+power((M6-[平均数]),2))/6) as decimal(18,2)) AS [方差]
from
(SELECT ID,M1,M2,M3,M4,M5,M6,cast((M1+M2+M3+M4+M5+M6)/6 as decimal(18,2)) AS [平均数] FROM TB9 ) as a--内层嵌套 算平均数
) as b --外层嵌套 算方差
--最后算标准差但是结果是
消息 156,级别 15,状态 1,第 5 行
关键字 'as' 附近有语法错误。
消息 1035,级别 15,状态 10,第 8 行
'cast' 附近有语法错误,需要 'AS'。
如果有结果是这样的,我不想要
ID M1 M2 M3 M4 M5 M6 平均数 方差 标准差
1 60 43 21 34 28 60 35.28571429 34.64285714 5.885818307
2 42 53 22 47 28 43 32.33333333 37.16666667 6.096447053
3 60 51 23 46 28 61 35.16666667 40.58333333 6.370504951
4 60 54 24 49 28 43 36.5 39.75 6.304760106
5 42 47 25 42 28 61 31.5 36.75 6.062177826
6 51 47 26 41 28 43 33.16666667 37.08333333 6.089608635
7 42 43 27 39 27 61 30.83333333 34.91666667 5.909032634
8 42 44 28 40 27 43 31.5 35.75 5.979130372
9 60 52 29 48 27 61 37.5 42.75 6.538348415
10 51 43 30 38 27 43 33.16666667 35.58333333 5.965176723
11 42 45 31 37 27 61 32.16666667 34.58333333 5.880759588
12 42 47 32 42 27 43 33.66666667 37.83333333 6.150880696
13 69 55 33 48 27 61 40.83333333 44.41666667 6.664583008
14 51 42 34 36 27 43 34 35 5.916079783
15 42 49 35 40 27 61 34.66666667 37.5 6.123724357
16 51 49 36 42 27 43 36.83333333 39.41666667 6.278269401
17 33 47 37 42 27 61 33.83333333 35.41666667 5.951190357我想得到的是这样的结果(请仔细对比)ID M1 M2 M3 M4 M5 M6 平均数 方差 标准差
1 60 43 21 34 28 60 35.29 34.64 5.89
2 42 53 22 47 28 43 32.33 37.17 6.10
3 60 51 23 46 28 61 35.17 40.58 6.37
4 60 54 24 49 28 43 36.50 39.75 6.30
5 42 47 25 42 28 61 31.50 36.75 6.06
6 51 47 26 41 28 43 33.17 37.08 6.09
7 42 43 27 39 27 61 30.83 34.92 5.91
8 42 44 28 40 27 43 31.50 35.75 5.98
9 60 52 29 48 27 61 37.50 42.75 6.54
10 51 43 30 38 27 43 33.17 35.58 5.97
11 42 45 31 37 27 61 32.17 34.58 5.88
12 42 47 32 42 27 43 33.67 37.83 6.15
13 69 55 33 48 27 61 40.83 44.42 6.66
14 51 42 34 36 27 43 34.00 35.00 5.92
15 42 49 35 40 27 61 34.67 37.50 6.12
16 51 49 36 42 27 43 36.83 39.42 6.28
17 33 47 37 42 27 61 33.83 35.42 5.95
请用SQL完成得出我要的结果就好
请教问题一:在SQL2005版本上执行函数后,怎样取函数值的小数点后2位(例如21/6=3.50不是取21/6=3.00应该是21/6=3.50
再次说明,例如20/6=3.33333333333333333现在要取小数部分的2位,就是20/6=3.33)
问题二:结果是这样的话如何修改,新手请教,请修改代码(复杂的我看不懂,请高手见谅,请详细一点)
消息 156,级别 15,状态 1,第 5 行
关键字 'as' 附近有语法错误。
消息 1035,级别 15,状态 10,第 8 行
'cast' 附近有语法错误,需要 'AS'。
ID M1 M2 M3 M4 M5 M6
1 60 43 21 34 28 60
2 42 53 22 47 28 43
3 60 51 23 46 28 61
4 60 54 24 49 28 43
5 42 47 25 42 28 61
6 51 47 26 41 28 43
7 42 43 27 39 27 61
8 42 44 28 40 27 43
9 60 52 29 48 27 61
10 51 43 30 38 27 43
11 42 45 31 37 27 61
12 42 47 32 42 27 43
13 69 55 33 48 27 61
14 51 42 34 36 27 43
15 42 49 35 40 27 61
16 51 49 36 42 27 43
17 33 47 37 42 27 61
执行以下(引用的是“ABUYING”提供的,谢谢“ABUYING” 指教)脚本
-- 加上decimal(18,2)
select ID,M1,M2,M3,M4,M5,M6
,''AS [平均数],''as [中位数],'' as [方差],cast(sqrt([方差]) as decimal(18,2)) as 标准差
from
(SELECT ID,M1,M2,M3,M4,M5,M6,cast((M1+M2+M3+M4+M5+M6)/6 as decimal(18,2)) AS [平均数]
,CAST((M3+M4)/2 as decimal(18,2)) AS [中位数]
,cast(((power((M1-[平均数]),2)+power((M2-[平均数]),2)+power((M3-[平均数]),2)+power((M4-[平均数]),2)+(power((M5-[平均数]),2)+power((M6-[平均数]),2))/6) as decimal(18,2)) AS [方差]
from
(SELECT ID,M1,M2,M3,M4,M5,M6,cast((M1+M2+M3+M4+M5+M6)/6 as decimal(18,2)) AS [平均数] FROM TB9 ) as a--内层嵌套 算平均数
) as b --外层嵌套 算方差
--最后算标准差但是结果是
消息 156,级别 15,状态 1,第 5 行
关键字 'as' 附近有语法错误。
消息 1035,级别 15,状态 10,第 8 行
'cast' 附近有语法错误,需要 'AS'。
如果有结果是这样的,我不想要
ID M1 M2 M3 M4 M5 M6 平均数 方差 标准差
1 60 43 21 34 28 60 35.28571429 34.64285714 5.885818307
2 42 53 22 47 28 43 32.33333333 37.16666667 6.096447053
3 60 51 23 46 28 61 35.16666667 40.58333333 6.370504951
4 60 54 24 49 28 43 36.5 39.75 6.304760106
5 42 47 25 42 28 61 31.5 36.75 6.062177826
6 51 47 26 41 28 43 33.16666667 37.08333333 6.089608635
7 42 43 27 39 27 61 30.83333333 34.91666667 5.909032634
8 42 44 28 40 27 43 31.5 35.75 5.979130372
9 60 52 29 48 27 61 37.5 42.75 6.538348415
10 51 43 30 38 27 43 33.16666667 35.58333333 5.965176723
11 42 45 31 37 27 61 32.16666667 34.58333333 5.880759588
12 42 47 32 42 27 43 33.66666667 37.83333333 6.150880696
13 69 55 33 48 27 61 40.83333333 44.41666667 6.664583008
14 51 42 34 36 27 43 34 35 5.916079783
15 42 49 35 40 27 61 34.66666667 37.5 6.123724357
16 51 49 36 42 27 43 36.83333333 39.41666667 6.278269401
17 33 47 37 42 27 61 33.83333333 35.41666667 5.951190357我想得到的是这样的结果(请仔细对比)ID M1 M2 M3 M4 M5 M6 平均数 方差 标准差
1 60 43 21 34 28 60 35.29 34.64 5.89
2 42 53 22 47 28 43 32.33 37.17 6.10
3 60 51 23 46 28 61 35.17 40.58 6.37
4 60 54 24 49 28 43 36.50 39.75 6.30
5 42 47 25 42 28 61 31.50 36.75 6.06
6 51 47 26 41 28 43 33.17 37.08 6.09
7 42 43 27 39 27 61 30.83 34.92 5.91
8 42 44 28 40 27 43 31.50 35.75 5.98
9 60 52 29 48 27 61 37.50 42.75 6.54
10 51 43 30 38 27 43 33.17 35.58 5.97
11 42 45 31 37 27 61 32.17 34.58 5.88
12 42 47 32 42 27 43 33.67 37.83 6.15
13 69 55 33 48 27 61 40.83 44.42 6.66
14 51 42 34 36 27 43 34.00 35.00 5.92
15 42 49 35 40 27 61 34.67 37.50 6.12
16 51 49 36 42 27 43 36.83 39.42 6.28
17 33 47 37 42 27 61 33.83 35.42 5.95
请用SQL完成得出我要的结果就好
请教问题一:在SQL2005版本上执行函数后,怎样取函数值的小数点后2位(例如21/6=3.50不是取21/6=3.00应该是21/6=3.50
再次说明,例如20/6=3.33333333333333333现在要取小数部分的2位,就是20/6=3.33)
问题二:结果是这样的话如何修改,新手请教,请修改代码(复杂的我看不懂,请高手见谅,请详细一点)
消息 156,级别 15,状态 1,第 5 行
关键字 'as' 附近有语法错误。
消息 1035,级别 15,状态 10,第 8 行
'cast' 附近有语法错误,需要 'AS'。
这是我借用后修改的,我想有修改错,请指导
select
ID,
M1,M2,M3,M4,M5,M6,
''AS [平均数],
''as [中位数],
'' as [方差],
cast(sqrt([方差]) as decimal(18,2)) as 标准差
from
(SELECT
ID,M1,M2,M3,M4,M5,M6,
cast((M1+M2+M3+M4+M5+M6)/6 as decimal(18,2)) AS [平均数]
,CAST((M3+M4)/2 as decimal(18,2)) AS [中位数]
,cast
(
(power((M1-[平均数]),2)
+power((M2-[平均数]),2)
+power((M3-[平均数]),2)
+power((M4-[平均数]),2)
+(power((M5-[平均数]),2)+power((M6-[平均数]),2))/6
) as decimal(18,2)) AS [方差]
from
(SELECT
ID,M1,M2,M3,M4,M5,M6,
cast((M1+M2+M3+M4+M5+M6)/6 as decimal(18,2)) AS [平均数]
FROM TB9 ) as a--内层嵌套 算平均数
) as b
-----------
3(所影响的行数为 1 行)
--------------------
3.33(所影响的行数为 1 行)
*/
但在不改变数值的情况下,可以乘以一个很接近于1 的数,但小数多个,则可以。
你可根据下例子去修改。
上面出错应该是括号的原因,因没有表结构,所以没运行。
SQL code
declare @var float
declare @i float
set @i=1.00000001
set @var=(20*@i)/6 --这里乘以@i ,值基本无改变,但却变为浮点数了
select @var 原值,cast(@var as real) 再转,cast(@var as decimal(18,2)) 四舍五入GO
原值 再转 四舍五入
---------------------- ------------- ---------------------------------------
3.33333336666667 3.333333 3.33(1 行受影响)
(爱新觉罗.毓华)
方法很好!支持!
所有的6 改成6.0就行了
select ID,M1,M2,M3,M4,M5,M6, [平均数],[方差],cast(sqrt([方差]) as decimal(18,2)) as 标准差
from
(SELECT ID,M1,M2,M3,M4,M5,M6,[平均数],
cast(((power((M1-[平均数]),2)+power((M2-[平均数]),2)+power((M3-[平均数]),2)+power((M4-[平均数]),2)+(power((M5-[平均数]),2)+power((M1-[平均数]),2))/6.0) as decimal(18,2)) AS [方差]
from
(SELECT ID,M1,M2,M3,M4,M5,M6,cast(((M1+M2+M3+M4+M5+M6)/6.0) as decimal(18,2)) AS [平均数] FROM TB9 ) as a--内层嵌套 算平均数
) as b --外层嵌套 算方差
--最后算标准差