Rss & SiteMap

Foxtable(狐表) http://www.foxtable.com

新一代数据库软件,完美融合Access、Foxpro、Excel、vb.net之优势,人人都能掌握的快速软件开发工具!
共11 条记录, 每页显示 10 条, 页签: [1] [2]
[浏览完整版]

标题:sql 生成某列的数据时,不满足条件=0 或 空值,怎么改我的代码?

1楼
e-png 发表于:2011/12/18 17:28:00
sql 生成某列的数据时,不满足条件=0 或 空值,怎么改我的代码?  发帖心情 Post By:2011-12-18 17:27:00 [只看该作者]

select (Select Max(分数) from {数据库} where 科目 = '数学') as 分数 from {数据库}

 

下面面只想有一个 8 ,其他都为空 或 0  ,该怎么该条件? 


图片点击可在新窗口打开查看此主题相关图片如下:未命名sql.jpg
图片点击可在新窗口打开查看
2楼
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编辑过]
3楼
e-png 发表于:2011/12/18 18:26:00
我是要全部的行,但只有那个最大的数显示在它本来的行的位置. 其他都要求空值或0
4楼
yangming 发表于:2011/12/18 18:30:00
那没必要这么做吧,呵呵,只要排序不就行了,呵
5楼
e-png 发表于:2011/12/18 18:34:00
yang版不一样的,^_^   我弄出来了:select iif((Select Max(分数) from {数据库} where 科目 = '数学')=分数,分数,"") as 分数 from {数据库}
6楼
yangming 发表于:2011/12/18 19:27:00

学习了,呵呵,只是我不太明白,你为何要这样的结果呢,如果是我,我更喜欢下面的代码:

 

Select 班级, 姓名 ,科目 ,分数 From {数据库} where 分数 = (Select Max(分数) from {数据库} where 科目 = '数学')

7楼
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中再处理掉这些空值行也是简单的事).  不知那位高手能否赐教. 我弄了几个小时不得要领啊.

 


图片点击可在新窗口打开查看此主题相关图片如下:未命名sql0.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2011-12-18 20:06:18编辑过]
8楼
yangming 发表于:2011/12/18 20:29:00
你如果直接将表格的格式改成,科目列都为列名,比如,数学,语文,外语,都做成列,那做交叉统计不是更方便了?
9楼
e-png 发表于:2011/12/18 20:52:00
只是学习,没有做什么 ^_^.
10楼
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")

共11 条记录, 每页显示 10 条, 页签: [1] [2]

Copyright © 2000 - 2018 foxtable.com Tel: 4000-810-820 粤ICP备11091905号

Powered By Dvbbs Version 8.3.0
Processed in .03174 s, 2 queries.