SQL中的case when 在access中怎么实现?

mxs_12345 2007-10-16 04:27:55
现在有两个表
表一(user):
UID 编号
UNAME 姓名

表二(yeji):
UID 编号
cj 金额
sign 是否成交(成交1 不成交0)

现在要做一个统计结果
希望显示的效果是:
UNAME CJ1(成交的金额) cj(金额) radio(成交比例)

要求: 表一中的UNAME中全部列出来(因为不一定每个人都有业绩的),结果按照CJ1降序排序

SQL语句可以这样实现:
select a.UID,UNAME,sum(case when sign=1 then cj else 0 end) CJ1,sum(cj) cj,sum(case when sign=1 then cj else 0 end)*1.0/sum(cj) radio from [User] a left Join [yeji] b on a.UID=b.UID group by a.UID,UNAME order by 3 desc
但现在的数据库是ACCESS ,access 中case when不可用,听说iff可用,但我试了,老报错,请问上面的语句在ACCESS中怎么实现呢
...全文
1786 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
mxs_12345 2007-10-17
  • 打赏
  • 举报
回复
哦 是小弟的疏忽!结贴散分!
WWWWA 2007-10-17
  • 打赏
  • 举报
回复
在ACCESS查询中测试SQL语句没有问题
babay2008 2007-10-17
  • 打赏
  • 举报
回复
mark
OracleRoob 2007-10-16
  • 打赏
  • 举报
回复
这样老提示 “ Microsoft VBScript 编译器错误 (0x800A0409)  
未结束的字符串常量”错误!

--------------------------------------------------------------

把SQL语句直接在Access的查询中执行试试。

--try

select
a.UID,
UNAME,
sum(iif([sign]=1,cj,0)) as CJ1,
sum(cj) cj,
sum(iif([sign]=1,cj,0))*1.0/sum(cj) as radio
from [User] a
left Join [yeji] b on a.UID=b.UID
group by a.UID,UNAME
order by sum(iif([sign]=1,cj,0)) desc
vbman2003 2007-10-16
  • 打赏
  • 举报
回复
这不是语句的错误吧?你将老大的语句直接放入ACCESS查询中去调试
OracleRoob 2007-10-16
  • 打赏
  • 举报
回复
--try

select
a.UID,
UNAME,
sum(iif([sign]=1,cj,0)) as CJ1,
sum(cj) cj,
sum(iif([sign]=1,cj,0))*1.0/sum(cj) as radio
from [User] a
left Join [yeji] b on a.UID=b.UID
group by a.UID,UNAME
order by sum(iif([sign]=1,cj,0)) desc
mxs_12345 2007-10-16
  • 打赏
  • 举报
回复
“--下面就是改为access中的SQL语句:

select
a.UID,
UNAME,
sum(iif(sign=1,cj,0)) CJ1,
sum(cj) cj,
sum(iif(sign=1,cj,0))*1.0/sum(cj) radio
from [User] a
left Join [yeji] b on a.UID=b.UID
group by a.UID,UNAME
order by 3 desc”

这样老提示 “ Microsoft VBScript 编译器错误 (0x800A0409)
未结束的字符串常量”错误!

OracleRoob 2007-10-16
  • 打赏
  • 举报
回复


--下面就是改为access中的SQL语句:

select
a.UID,
UNAME,
sum(iif(sign=1,cj,0)) CJ1,
sum(cj) cj,
sum(iif(sign=1,cj,0))*1.0/sum(cj) radio
from [User] a
left Join [yeji] b on a.UID=b.UID
group by a.UID,UNAME
order by 3 desc

mxs_12345 2007-10-16
  • 打赏
  • 举报
回复
按照5楼的做法会出现
Microsoft VBScript 编译器错误 (0x800A0409)
未结束的字符串常量
/xxxx/Untitled-3.asp, line 37, column 71
sqltext="select a.UID,UNAME,sum(iif(sign=1,cj,0)) as CJ1,sum(cj) as cj,
mxs_12345 2007-10-16
  • 打赏
  • 举报
回复
具体请将上面的SQL 查询语句改成access中可用实现的语句,后在加50分
wwwwb 2007-10-16
  • 打赏
  • 举报
回复
elect a.UID,UNAME,sum(iif(sign=1,cj,0)) as CJ1,sum(cj) as cj,
sum(iif(sign=1,cj,0))*1.0/sum(cj) as radio from [User] a left Join [yeji] b
on a.UID=b.UID group by a.UID,UNAME order by 3 desc
OracleRoob 2007-10-16
  • 打赏
  • 举报
回复
SQL Server中的case when,在Access中用iif()。


IIf 函数


根据表达式的值,来返回两部分中的其中一个。

语法

IIf(expr, truepart, falsepart)

IIf 函数的语法含有下面这些命名参数:

部分 描述
expr 必要参数。用来判断真伪的表达式。
truepart 必要参数。如果 expr 为 True,则返回这部分的值或表达式。
falsepart 必要参数。如果 expr 为 False,则返回这部分的值或表达式。



说明

由于 IIf 会计算 truepart 和 falsepart,虽然它只返回其中的一个。因此要注意到这个副作用。例如,如果 falsepart 产生一个被零除错误,那么程序就会发生错误,即使 expr 为 True。




IIf 函数示例
本示例使用 IIf 函数来判断 CheckIt 过程之 TestMe 参数的值,如果参数值大于 1000 则传回“Large”;否则传回“小图标”。

Function CheckIt (TestMe As Integer)
CheckIt = IIf(TestMe > 1000, "Large", "Small")
End Function

OracleRoob 2007-10-16
  • 打赏
  • 举报
回复
select
a.UID,
UNAME,
sum(iif(sign=1,cj,0)) CJ1,
sum(cj) cj,
sum(iif(sign=1,cj,0))*1.0/sum(cj) radio
from [User] a
left Join [yeji] b on a.UID=b.UID
group by a.UID,UNAME
order by 3 desc

OracleRoob 2007-10-16
  • 打赏
  • 举报
回复
iif()
mxs_12345 2007-10-16
  • 打赏
  • 举报
回复
在线等答案!

7,713

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
社区管理员
  • Access
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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