Foxtable(狐表)用户栏目专家坐堂 → iif函数用Case When语句代替的问题


  共有2624人关注过本帖树形打印复制链接

主题:iif函数用Case When语句代替的问题

帅哥哟,离线,有人找我吗?
myredsun
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:153 积分:1602 威望:0 精华:0 注册:2014/2/17 16:11:00
iif函数用Case When语句代替的问题  发帖心情 Post By:2016/1/3 11:11:00 [只看该作者]

Dim b As New SQLGroupTableBuilder("统计表1","学生成绩")
b
.Groups.AddDef("科目")
b
.Totals.AddDef("分数",AggregateEnum.Max,"最高分")
b
.Totals.AddDef("分数",AggregateEnum.Min,"最低分")
b
.Totals.AddDef("分数",AggregateEnum.Average,"平均分")
b
.Totals.AddExp("分布_60以下","iif(分数 < 60,1,0)")

b
.Totals.AddExp("分布_60-70","iif(分数 >= 60 And 分数 < 70,1,0)")

请问老师:最后那句如何用case when 语句转换。在帮助中我转了几次都不行。有劳了。

 回到顶部
帅哥哟,离线,有人找我吗?
myredsun
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:153 积分:1602 威望:0 精华:0 注册:2014/2/17 16:11:00
  发帖心情 Post By:2016/1/3 20:30:00 [只看该作者]

示例一

假定有下图所示的成绩表:

图片点击可在新窗口打开查看

我们需要统计每一个科目的成绩分布范围,例如60分以下,60分以上,70分以上等等范围的人数,以及各个科目的最高分、最低分、平均分等:

图片点击可在新窗口打开查看

采用自定义表达式,可以方便地统计出来:

Dim b As New SQLGroupTableBuilder("统计表1","学生成绩")
b
.Groups.AddDef("科目")
b
.Totals.AddDef("分数",AggregateEnum.Max,"最高分")
b
.Totals.AddDef("分数",AggregateEnum.Min,"最低分")
b
.Totals.AddDef("分数",AggregateEnum.Average,"平均分")
b
.Totals.AddExp("分布_60以下","iif(分数 < 60,1,0)")
b
.Totals.AddExp("分布_60-70","iif(分数 >= 60 And 分数 < 70,1,0)")
b
.Totals.AddExp("分布_70-80","iif(分数 >= 70 And 分数 < 80,1,0)")
b
.Totals.AddExp("分布_80-90","iif(分数 >= 80 And 分数 < 90,1,0)")
b
.Totals.AddExp("分布_90-100","iif(分数 >= 90 And 分数 < 100,1,0)")
b
.Totals.AddExp("分布_100-110","iif(分数 >= 100 And 分数 < 110,1,0)")
b
.Totals.AddExp("分布_110-120","iif(分数 >= 110 And 分数 < 120,1,0)")
b
.Totals.AddExp("分布_120-130","iif(分数 >= 120 And 分数 < 130,1,0)")
b
.Totals.AddExp("分布_130-140","iif(分数 >= 130 And 分数 < 140,1,0)")
b
.Totals.AddExp("分布_140以上","iif(分数 >= 140,1,0)")
b
.build()
MainTable
 = Tables("统计表1")


SQL Server没有iif函数,需要用Case When语句代替。


请教:如何代替?有劳各位了


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/1/3 21:16:00 [只看该作者]

比如

 

b.Totals.AddExp("分布_60-70","(case when 分数>=60 and 分数<70 then 1 Else 0)")


 回到顶部
帅哥哟,离线,有人找我吗?
myredsun
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:153 积分:1602 威望:0 精华:0 注册:2014/2/17 16:11:00
  发帖心情 Post By:2016/1/3 22:57:00 [只看该作者]

Dim b As New  SQLGroupTableBuilder("统计表1","成绩表")
b.C
 b.Groups.AddDef("科目")
 b.Totals.AddDef("分数",AggregateEnum.Max,"最高分")
 b.Totals.AddDef("分数",AggregateEnum.Min,"最低分")
 b.Totals.AddDef("分数",AggregateEnum.Average,"平均分")
 b.Totals.AddExp("分布_60-70","(case when 分数 >= 60 And 分数 < 70 then 1 else 0)")
  b.build()
 MainTable = Tables("统计表1")

执行发生错误,先谢了。再有劳各位

 回到顶部
客人(61.146.*.*)
  5楼


  发帖心情 Post By:2016/1/3 23:02:00 [只看该作者]

b.Totals.AddExp("分布_60-70","(case when 分数>=60 and 分数<70 then 1 Else 0 end)")_____后面加上end就行了。太谢谢你了!

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/1/3 23:42:00 [只看该作者]

 哦,是的,少写了End

 回到顶部