select 乡镇名称, sum(case when year(日期)=2002 then 实际投资 else 0 end) as 去年实际总额, sum(case when year(日期)=2003 then 实际投资 else 0 end) as 今年实际总额, sum(case when year(日期)=2002 then 实际投资 else 0 end)/ sum(case when year(日期)=2003 then 实际投资 else 0 end)*100 as 比率 from 你的表 group by 乡镇名称
不用子查询用case就可以了不知道你的数据库,写下思路把select 乡镇名称,sum(case 日期.年=2003 then 实际投资 else 0)/sum(case 日期.年=2002 then 实际投资 else 0) as 投资同比 from 表名 order by 乡镇名称
我用的是access数据库,还可以用case语句吗?
试一下吧,不行的话多写一点代码 select A.乡镇名称,A.去年实际总额,B.今年实际总额,A.去年实际总额/B.今年实际总额*100 as 比率 from (select 乡镇名称,sum(实际总额) from 表 where year(日期)=2002 group by 乡镇名称) A left join (select 乡镇名称,sum(实际总额) from 表 where year(日期)=2003 group by 乡镇名称) B on A.乡镇名称=B.乡镇名称要确保今年乡镇与去年乡镇一样,如果不一样再加一个表,把乡镇名称全抓出来
我是说怎么用在SQL语句中,使得比率的小数点只保留两位。
cast(A.去年实际总额/B.今年实际总额*100,numeric(4,2)) as 比率
修正: cast(A.去年实际总额/B.今年实际总额*100 as numeric(4,2)) as 比率
wdsimon(老王) :我是把这条查询语句用在了ADOQUERY.SQL属性里了,你的 select A.乡镇名称,A.去年实际总额,B.今年实际总额,A.去年实际总额/B.今年实际总额*100 as 比率 from (select 乡镇名称,sum(实际总额) from 表 where year(日期)=2002 group by 乡镇名称) A left join (select 乡镇名称,sum(实际总额) from 表 where year(日期)=2003 group by 乡镇名称) B on A.乡镇名称=B.乡镇名称 这些语句编译通过了,但此后加了函数ROUNDDOWN(number,num_digits)或formatfloat('#.00',3.1)等,都提示函数为定义,我真的到是哪儿出毛病,我还急着把‘比率'的小数部分固定为两位.请各位大侠再帮帮忙.
wdsimon(老王) :我是把这条查询语句用在了ADOQUERY.SQL属性里了,你的 select A.乡镇名称,A.去年实际总额,B.今年实际总额,A.去年实际总额/B.今年实际总额*100 as 比率 from (select 乡镇名称,sum(实际总额) from 表 where year(日期)=2002 group by 乡镇名称) A left join (select 乡镇名称,sum(实际总额) from 表 where year(日期)=2003 group by 乡镇名称) B on A.乡镇名称=B.乡镇名称 这些语句编译通过了,但此后加了函数ROUNDDOWN(number,num_digits)或formatfloat('#.00',3.1)等,都提示“函数未定义”,我真的不知道是哪儿出了毛病,我还急着把‘比率'的小数部分固定为两位.请各位大侠再帮帮忙.
format函数Access绝对支持 一般情况下,vb支持的函数,access都支持 例如: ' 用户自定义的格式。 MyStr = Format(5459.4, "##,##0。00") ' 返回 "5,459.40"。 MyStr = Format(334。9, "###0。00") ' 返回 "334.90"。 MyStr = Format(5, "0。00%") ' 返回 "500.00%"。 更改: select A.乡镇名称,A.去年实际总额,B.今年实际总额,Format( A.去年实际总额/B.今年实际总额,"###0.00") as 比率 from (select 乡镇名称,sum(实际总额) from 表 where year(日期)=2002 group by 乡镇名称) A left join (select 乡镇名称,sum(实际总额) from 表 where year(日期)=2003 group by 乡镇名称) B on A.乡镇名称=B.乡镇名称access 2000通过
sum(case when year(日期)=2002 then 实际投资 else 0 end) as 去年实际总额,
sum(case when year(日期)=2003 then 实际投资 else 0 end) as 今年实际总额,
sum(case when year(日期)=2002 then 实际投资 else 0 end)/
sum(case when year(日期)=2003 then 实际投资 else 0 end)*100 as 比率
from 你的表 group by 乡镇名称
select
A.乡镇名称,A.去年实际总额,B.今年实际总额,A.去年实际总额/B.今年实际总额*100 as 比率
from
(select 乡镇名称,sum(实际总额) from 表 where year(日期)=2002 group by 乡镇名称) A
left join
(select 乡镇名称,sum(实际总额) from 表 where year(日期)=2003 group by 乡镇名称) B
on A.乡镇名称=B.乡镇名称要确保今年乡镇与去年乡镇一样,如果不一样再加一个表,把乡镇名称全抓出来
cast(A.去年实际总额/B.今年实际总额*100 as numeric(4,2)) as 比率
你可用取整函数
ROUNDDOWN
向下(朝零的方向)对数字取整。若该函数返回错误值 #NAME?,则说明可能需要安装 msowcf.dll。语法ROUNDDOWN(number,num_digits)Number 是需要向下取整的任意实数。Num_digits 是取整后要保留的位数。此参数为负数表示要保留小数点左边的整数部分,为 0 或忽略时表示取整为最接近的整数。将要取整的数乘以100,然后取整,然后再除100
select
A.乡镇名称,A.去年实际总额,B.今年实际总额,A.去年实际总额/B.今年实际总额*100 as 比率
from
(select 乡镇名称,sum(实际总额) from 表 where year(日期)=2002 group by 乡镇名称) A
left join
(select 乡镇名称,sum(实际总额) from 表 where year(日期)=2003 group by 乡镇名称) B
on A.乡镇名称=B.乡镇名称
这些语句编译通过了,但此后加了函数ROUNDDOWN(number,num_digits)或formatfloat('#.00',3.1)等,都提示函数为定义,我真的到是哪儿出毛病,我还急着把‘比率'的小数部分固定为两位.请各位大侠再帮帮忙.
select
A.乡镇名称,A.去年实际总额,B.今年实际总额,A.去年实际总额/B.今年实际总额*100 as 比率
from
(select 乡镇名称,sum(实际总额) from 表 where year(日期)=2002 group by 乡镇名称) A
left join
(select 乡镇名称,sum(实际总额) from 表 where year(日期)=2003 group by 乡镇名称) B
on A.乡镇名称=B.乡镇名称
这些语句编译通过了,但此后加了函数ROUNDDOWN(number,num_digits)或formatfloat('#.00',3.1)等,都提示“函数未定义”,我真的不知道是哪儿出了毛病,我还急着把‘比率'的小数部分固定为两位.请各位大侠再帮帮忙.
一般情况下,vb支持的函数,access都支持
例如:
' 用户自定义的格式。
MyStr = Format(5459.4, "##,##0。00") ' 返回 "5,459.40"。
MyStr = Format(334。9, "###0。00") ' 返回 "334.90"。
MyStr = Format(5, "0。00%") ' 返回 "500.00%"。
更改:
select
A.乡镇名称,A.去年实际总额,B.今年实际总额,Format( A.去年实际总额/B.今年实际总额,"###0.00") as 比率
from
(select 乡镇名称,sum(实际总额) from 表 where year(日期)=2002 group by 乡镇名称) A
left join
(select 乡镇名称,sum(实际总额) from 表 where year(日期)=2003 group by 乡镇名称) B
on A.乡镇名称=B.乡镇名称access 2000通过
ROUNDDOWN函数需要安装msowcf.dll。
select
A.乡镇名称,A.去年实际总额,B.今年实际总额,Format( A.去年实际总额/B.今年实际总额,"###0.00") as 比率
编译时,出现了类型不匹配,可能:
A.去年实际总额/B.今年实际总额
是string类型,而format()需的是float类型。
有没有类型转换函数,将sting转换为float的函数,不过要适用于access数据库的。
select a = (select b from f where f.code = d.code) from d