读书人

看看小弟我的SQL 语句错在哪了

发布时间: 2012-12-14 10:33:08 作者: rapoo

看看我的SQL 语句错在哪了 ?
语句可以执行,但在最后的那个DECIMAL(18,2) 没有起作用,就是保留了两位是0的小数,没有计算对。比如109/2=54.00

with temptb
as(

select r_域名,CONVERT (VARCHAR(20),r_date ,23 )as 日期,count(1) as PV
from test
where r_域名 is not null group by r_域名,CONVERT (VARCHAR(20),r_date ,23 )

)

select t1.r_域名,sum(pv) ,
CAST(avg(pv) AS DECIMAL(18,2)) AS '日均PV'
from temptb t1 group by r_域名

[最优解释]
试试
WITH    temptb
AS ( SELECT r_域名 ,
CONVERT (VARCHAR(20), r_date, 23) AS 日期 ,
COUNT(1) AS PV
FROM test
WHERE r_域名 IS NOT NULL
GROUP BY r_域名 ,
CONVERT (VARCHAR(20), r_date, 23)
)
SELECT t1.r_域名 ,
SUM(pv) ,
CAST(AVG(pv * 1.0) AS DECIMAL(18, 2)) AS '日均PV'
FROM temptb t1
GROUP BY r_域名

[其他解释]
HTML?
[其他解释]
引用:
HTML?


没有HTML ,忽略那些,我本来想标记他们为红色的
我现在也不知道没发编辑他们了。
语句是可以运行的。就是没有小数部分,现在计算的小数部分都是00
[其他解释]
去掉HTML 的代码

with temptb
as(

select r_域名,CONVERT (VARCHAR(20),r_date ,23 )as 日期,count(1) as PV
from test
where r_域名 is not null group by r_域名,CONVERT (VARCHAR(20),r_date ,23 )

)

select t1.r_域名,sum(pv) ,
CAST(avg(pv) AS DECIMAL(18,2)) AS '日均PV'
from temptb t1 group by r_域名

[其他解释]
引用:
试试SQL code?1234567891011121314WITH temptb AS ( SELECT r_域名 , CONVERT (VARCHAR(20), r_date, 23) AS 日期 , COUNT(1) AS PV ……


可以了

为什么加了 *1.0 就好了 ~~~
[其他解释]
因为默认是int,而int是忽略掉小数位而取整的,所以如果0.xxx的int类型,最终结果就是0,加了点之后,就隐式转换成浮点型
[其他解释]
该回复于2012-11-20 16:24:55被管理员删除
[其他解释]
引用:
因为默认是int,而int是忽略掉小数位而取整的,所以如果0.xxx的int类型,最终结果就是0,加了点之后,就隐式转换成浮点型
高手。新人学习了!

读书人网 >SQL Server

热点推荐