以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- sql 生成某列的数据时,不满足条件=0 或 空值,怎么改我的代码? (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=15251) |
|
-- 作者:e-png -- 发布时间:2011/12/18 17:28:00 -- sql 生成某列的数据时,不满足条件=0 或 空值,怎么改我的代码? sql 生成某列的数据时,不满足条件=0 或 空值,怎么改我的代码? ![]() |
|
-- 作者:yangming -- 发布时间:2011/12/18 18:22:00 -- select TOP 1 (Select Max(分数) from {数据库} where 科目 = \'数学\') as 分数 from {数据库} 我觉得下面的代码更直观一些,呵 select TOP 1 (Select Max(分数) from {数据库} where 科目 = \'数学\') as 数学最大值 from {数据库} [此贴子已经被作者于2011-12-18 18:25:14编辑过]
|
|
-- 作者:e-png -- 发布时间:2011/12/18 18:26:00 -- 我是要全部的行,但只有那个最大的数显示在它本来的行的位置. 其他都要求空值或0 |
|
-- 作者:yangming -- 发布时间:2011/12/18 18:30:00 -- 那没必要这么做吧,呵呵,只要排序不就行了,呵 |
|
-- 作者:e-png -- 发布时间:2011/12/18 18:34:00 -- yang版不一样的,^_^ 我弄出来了:select iif((Select Max(分数) from {数据库} where 科目 = \'数学\')=分数,分数,"") as 分数 from {数据库} |
|
-- 作者:yangming -- 发布时间:2011/12/18 19:27:00 -- 学习了,呵呵,只是我不太明白,你为何要这样的结果呢,如果是我,我更喜欢下面的代码:
Select 班级, 姓名 ,科目 ,分数 From {数据库} where 分数 = (Select Max(分数) from {数据库} where 科目 = \'数学\') |
|
-- 作者:e-png -- 发布时间:2011/12/18 19:57:00 -- yang版,在sql命令窗口运行以下代码就知道了: 不过科目多了代码就太长了,呵呵 只是学习用的.
select 班级,姓名,科目,iif((Select Max(分数) from {数据库} where 科目 = \'数学\')=分数,分数,"") As 数学,iif((Select Max(分数) from {数据库} where 科目 = \'语文\') = 分数,分数,"") as 语文,iif((Select Max(分数) from {数据库} where 科目 = \'政治\')=分数,分数,"") as 政治 from {数据库}
这样做交叉统计就简单多了,只是三个统计列都是空值的行要能不显示出来就好了(当然在foxtable中再处理掉这些空值行也是简单的事). 不知那位高手能否赐教. 我弄了几个小时不得要领啊.
![]() ![]() [此贴子已经被作者于2011-12-18 20:06:18编辑过]
|
|
-- 作者:yangming -- 发布时间:2011/12/18 20:29:00 -- 你如果直接将表格的格式改成,科目列都为列名,比如,数学,语文,外语,都做成列,那做交叉统计不是更方便了? |
|
-- 作者:e-png -- 发布时间:2011/12/18 20:52:00 -- 只是学习,没有做什么 ^_^. |
|
-- 作者:yangming -- 发布时间:2011/12/18 20:56:00 -- 以下是引用e-png在2011-12-18 20:52:00的发言:
只是学习,没有做什么 ^_^. 这段代码,可以将表A转化成表B,呵呵 Dim dtb As New DataTableBuilder("表B") dtb.AddDef("姓名", Gettype(String), 32) For Each v As String In DataTables("表A").GetUniqueValues("","课程") dtb.AddDef(v, Gettype(Double)) Next dtb.Build() For Each v As String In DataTables("表A").GetUniqueValues("","姓名") Dim dr1 As DataRow = DataTables("表B").AddNew() dr1("姓名") = v For Each dr2 As DataRow In DataTables("表A").DataRows If dr2("姓名") = v Then dr1(dr2("课程")) = dr2("分数") End If Next Next MainTable = Tables("表B") |