sql语句怎样怎样写?怎样对有汉字的字段进行统计计算?高分相送

yyy431706 2003-08-20 04:50:40
我有一字段既有汉字又有数字
用select统计时将字段里的汉字用数字0代替,请问大家有没有办法呀?
...全文
61 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyy431706 2003-08-21
  • 打赏
  • 举报
回复
2
yyy431706 2003-08-21
  • 打赏
  • 举报
回复
sql="SELECT month(receive.sgsj) as month,
sum(iif(zrrd.fc1 not in ('未填','为空'),0,1)) as fc1
FROM zrrd INNER JOIN receive ON receive.ajbh=zrrd.ajbh
WHERE year(receive.sgsj)='"&year&"' AND receive.cjr='"&cjr&"'
group by month(receive.sgsj)"
这个语句是对的,
但将iif里的1改为clng(zrrd.fc1)时会出错
输出的sql语句:
SELECT month(receive.sgsj) as month,sum(iif(zrrd.fc1 not in ('未填','为空'),0,cint(zrrd.fc1))) as fc1 FROM zrrd INNER JOIN receive ON receive.ajbh=zrrd.ajbh WHERE year(receive.sgsj)='2003' AND receive.cjr='小王' group by month(receive.sgsj)

报错:
Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e07'

[Microsoft][ODBC Microsoft Access Driver] 标准表达式中数据类型不匹配。

/work/index/fc_year.asp,行 34


yyy431706 2003-08-21
  • 打赏
  • 举报
回复
也不行,输出的sql语句:
SELECT month(receive.sgsj) as month,
sum(iif(zrrd.fc1 in ('未填','为空'),0,clng(zrrd.fc1)) as fc1 FROM zrrd
INNER JOIN receive ON receive.ajbh=zrrd.ajbh
WHERE year(receive.sgsj)='2003' AND receive.cjr='小王'
group by month(receive.sgsj)


报错如下上:
Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e14'

[Microsoft][ODBC Microsoft Access Driver] 语法错误 (操作符丢失) 在查询表达式 'sum(iif(zrrd.fc1 in ('未填','为空'),0,clng(zrrd.fc1)) as fc1 FROM zrrd INNER JOIN receive ON receive.ajbh=zrrd.ajbh WHERE year(receive.sgsj)='2003' AND receive.cjr='小王' group by month(receive.sgsj)' 中。

/work/index/fc_year.asp,行 34
pengdali 2003-08-21
  • 打赏
  • 举报
回复
sql="SELECT month(receive.sgsj) as month,
sum(iif(zrrd.fc1 in ('未填','为空'),0,zrrd.fc1) as fc1
FROM zrrd
INNER JOIN receive ON receive.ajbh=zrrd.ajbh
WHERE year(receive.sgsj)='"&year&"' AND receive.cjr='"&cjr&"'
group by month(receive.sgsj)"

呢?
yyy431706 2003-08-21
  • 打赏
  • 举报
回复
sql="SELECT month(receive.sgsj) as month,
sum(iif(zrrd.fc1 not in('未填','为空')),clng(zrrd.fc1),0) as fc1
FROM zrrd INNER JOIN receive ON receive.ajbh=zrrd.ajbh
WHERE year(receive.sgsj)='"&year&"' AND receive.cjr='"&cjr&"'
group by month(receive.sgsj)"

用这种方法输出的sql语句如下:
SELECT month(receive.sgsj) as month,sum(iif(zrrd.fc1 not in('未填','为空')),clng(zrrd.fc1),0) as fc1 FROM zrrd INNER JOIN receive ON receive.ajbh=zrrd.ajbh WHERE year(receive.sgsj)='2003' AND receive.cjr='小王' group by month(receive.sgsj)

报错如下:
Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e14'

[Microsoft][ODBC Microsoft Access Driver] 用于函数参数的个数不对 在查询表达式 'sum(iif(zrrd.fc1 not in('未填','为空')),clng(zrrd.fc1),0)' 中。

/work/index/fc_year.asp,行 32
yyy431706 2003-08-21
  • 打赏
  • 举报
回复
SELECT month(receive.sgsj) as month,sum(iif(zrrd.fc1='未填' or zrrd.fc1='为空',0,clng(zrrd.fc1)) as fc1 FROM zrrd INNER JOIN receive ON receive.ajbh=zrrd.ajbh WHERE year(receive.sgsj)='2003' AND receive.cjr='小王' group by month(receive.sgsj)
Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e14'

[Microsoft][ODBC Microsoft Access Driver] 语法错误 (操作符丢失) 在查询表达式 'sum(iif(zrrd.fc1='未填' or zrrd.fc1='为空',0,clng(zrrd.fc1)) as fc1 FROM zrrd INNER JOIN receive ON receive.ajbh=zrrd.ajbh WHERE year(receive.sgsj)='2003' AND receive.cjr='小王' group by month(receive.sgsj)' 中。


/work/index/fc_year.asp,行 32

还是不行呀,
pengdali(大力 V2.0) ,能不能帮我看看呀,我很急呀,马上要交工了
pengdali 2003-08-21
  • 打赏
  • 举报
回复
sql="SELECT month(receive.sgsj) as month,
sum(iif(zrrd.fc1='未填' or zrrd.fc1='为空',0,clng(zrrd.fc1)) as fc1
FROM zrrd
INNER JOIN receive ON receive.ajbh=zrrd.ajbh
WHERE year(receive.sgsj)='"&year&"' AND receive.cjr='"&cjr&"'
group by month(receive.sgsj)"

用iif代替case
pengdali 2003-08-21
  • 打赏
  • 举报
回复
sql="SELECT month(receive.sgsj) as month,
sum(iif(zrrd.fc1='未填' or zrrd.fc1='为空',0,clng(zrrd.fc1)) as fc1
FROM zrrd
INNER JOIN receive ON receive.ajbh=zrrd.ajbh
WHERE year(receive.sgsj)='"&year&"' AND receive.cjr='"&cjr&"'
group by month(receive.sgsj)"

用iif代替case
yyy431706 2003-08-21
  • 打赏
  • 举报
回复
sql="SELECT month(receive.sgsj) as month,
sum(case when zrrd.fc1='未填' or zrrd.fc1='为空' then 0 else clng(zrrd.fc1) end) as fc1
FROM zrrd
INNER JOIN receive ON receive.ajbh=zrrd.ajbh
WHERE year(receive.sgsj)='"&year&"' AND receive.cjr='"&cjr&"'
group by month(receive.sgsj)"
我的代码是这样的,意思是如果字段为未填或为空,
统计时取0,
否则将其转化为数字统计。
一位大哥说access不支持case when
,请问大家有没有好的解决方法,
yokel 2003-08-20
  • 打赏
  • 举报
回复
楼主好象不是这个意思,不过存储过程中写一个循环,再用楼上的方法就ok了
伍子V5 2003-08-20
  • 打赏
  • 举报
回复
上面位小哥说的很对:)
lynx1111 2003-08-20
  • 打赏
  • 举报
回复
UP
CrazyFor 2003-08-20
  • 打赏
  • 举报
回复
select sum(case when isnumeric(字段)=1 then 字段 else 0 end) from 表
amtyuranus 2003-08-20
  • 打赏
  • 举报
回复
那要先辨别是不是汉字啊?这个以前我在c++ builder里看到这样的贴的,你去找出来看看就知道了
CrazyFor 2003-08-20
  • 打赏
  • 举报
回复
select sum(case when isnumeric(字段)=1 then 字段 else 0 end) from 表

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧