Access911.net   |   a9BBS   |   OTaA System  
  搜索文章:  
Access911欢迎您光临  
   主页      上传      繁體版       论坛     
设为首页  |  加入收藏   
  
你现在的位置:文章索引 -> 文章分类 -> VBA  
 首页|  近日更新|  下载  |  文章索引  |  搜索|  术语|  承接工程|  
 
系统正在加载内容,请耐心等待...
 
 查询
 窗体
 报表
 
 
 VBA
 函数
 ADO/DAO/ADO.NET
 API
 ADP
 安全
 发布
 OA
 ASP/ASP.NET
 其他语言
 控件
 DELPHI
 C#/.Net
 本站
 其他
 小例程
 常用软件
 参考文档
 业主作品
 网友大作
 
 
友情链接
 access911.net
 
访问人次
 1702402
 
站长 E-Mail
 net911@sina.com
 access911@gmail.com
 
RSS 订阅

显示附加信息 >>>

新手来看:如何实现文字的sum?

作者:cg1  摘自:access911.net  :cg1  更新日期:2003-8-8  浏览人次:

 

问题:


如何通过 sql解决下列问题?
dq(地区)  xm(姓名)
A         张三
A         李四
B         王五
B         王六
B         王七
C         王九

我想做一个视图转换成
dq           xm
A           张三,李四
B           王五,王六,王七
C           王九

 

回答:


由于以下文章描述不够清晰

    新手来看:如何实现文字的sum? 
    http://access911.net/?kbid;77FABF1E13DC
 

已经在

    新手来看:如何实现文字的sum?(修订) 
    http://www.access911.net/?kbid;72FABE1E14DCE7F3

作了修订。上述两篇文章适用于 ACCESS 2000 至 ACCESS 2003 版本, ACCESS 2007 版本请参考:

    ACCESS2007如何利用“多值”实现文字的sum《表》
    http://access911.net/index.asp?u1=a&u2=72FABE1E16DCECF3

第一,这根本是一个错误的问题,请记住SQL的应用范围
第二,给你一个能够实现该问题的傻方法(不推荐)

在ACCESS模块里写函数
基本程序如下
Public Function return_sl(dq As String) As String  'dQ为社区名称
    Dim sr As String  '声明一个整型变量
    Set db = CurrentDb() '指定数据库为当前数据库
    Set recname = db.OpenRecordset("select * from 表A where sqmc='" + dq + "'") '将对应地区“XM”表读入记录集
    Set strname = recname![mjxm] '指定记录集“姓名字段”

    Do Until recname.EOF
        sr = sr + " " + strname
        recname.MoveNext
    Loop

    return_sl = sr
    recname.Close
End Function


然后在SELECT语句直接调用
select dq,return_sl(dq) as xm from 表A GROUP BY DQ

就行了

以下是调用 ADO 的:
Function test()
    Debug.Print StringSum_ADO("606NCT", "type", "incline", "10")
End Function

Public Function StringSum_ADO(ByVal strTableName As String, _
                          ByVal strReturnFieldName As String, _
                          Optional ByVal strFieldName As String, _
                          Optional ByVal strValue As String, _
                          Optional ByVal strDelimiter As String) As String
'本函数用于根据条件生成文字的 SUM

    Dim strA As String
    Dim Conn As New ADODB.Connection
    Dim Rs As New ADODB.Recordset
    Dim strSQL As String
    Set Conn = CurrentProject.Connection
    
    If strDelimiter = "" Then
        strDelimiter = ","
    End If
    If strFieldName <> "" And strValue <> "" Then
        strSQL = " Where " & strFieldName & "=" & strValue
    End If
    strSQL = "select * from " & strTableName & strSQL
    Debug.Print strSQL
    Rs.Open strSQL, Conn, 1, 1
    Do Until Rs.EOF
        strA = strA & Rs(strReturnFieldName) & strDelimiter
        Rs.MoveNext
    Loop
    Rs.Close
    StringSum_ADO = strA
End Function



 

方法二:

相关方法在adp(sql server)中也行得通
create function getstr(@content int)
returns varchar(2000)
as 
begin
declare @str varchar(2000)
set @str=''
select @str=@str+','+rtrim(字符列) from 你的表 where p_seq=@content
select @str=right(@str,len(@str)-1) where @str<>''
return @str
end
go

--调用:
select p_seq,dbo.getstr(p_seq) f0002,count(*) num1  from 你的表 group by p_seq


 


本站文章旨在为该问题提供解决思路及关键性代码,并不能完成应该由网友自己完成的所有工作,请网友在仔细看文章并理解思路的基础上举一反三、灵活运用。

access911.net 原创文章,作者本人对文章保留一切权利。
如需转载必须征得作者同意并注明本站链接

 

 
相关文章
     没有手动相关文章
     新手来看:如何实现文字的sum?(修订)
     如何合并多个表结构相同的MDB
     关于如何得到新增记录的自动编号字段数值方法三
     为什么ADP中明明源表15000条记录用select into生成新表却只有10000条了?
     如何任意记录上进行编辑,然后保存成一条新的记录,同时原记录没有发生改变
     新手来看:如何重复上一条记录?
     新手来看:如何获取recordset记录号?
     如何得知一个查询(update insert select)将改变或影响多少条记录?
     关于如何得到新增记录的自动编号字段数值方法二
     如何在表中新插入新记录后,获取该记录自动编号字段的值?
 
评论
     查看或发表更多的评论,请单击这里。
 
 
 
 
 
   
  Access911.net   |   a9BBS   |   OTaA System   |
建站日期:2000年4月2日  |  设计施工:陈格 ( access911 & cg1 )
 Copyright © 2000 - 2003 COMET, 陈格 保留所有权利