sql – MS访问(2003)是否具有与存储过程相当的任何内容.我想在MS中运行一个复杂的查询
发布时间:2020-05-23 08:12:37 所属栏目:MsSql 来源:互联网
导读:我有一张桌子,叫做TBL.它有两列,称为A和B.现在在查询中,我需要一列作为A,其他列应该是TBL中与A对应的所有B的逗号分隔列表. 例如TBL就是这样 1阿尔法 2 Beta 1伽玛 1达美 查询结果应该是 1 Alpha,Gamma,Delta 2 Beta 这种类型的事情在存储过程中与光标非常容易
|
我有一张桌子,叫做TBL.它有两列,称为A和B.现在在查询中,我需要一列作为A,其他列应该是TBL中与A对应的所有B的逗号分隔列表.
1阿尔法 2 Beta 1伽玛 1达美 查询结果应该是 1 Alpha,Gamma,Delta 2 Beta 这种类型的事情在存储过程中与光标非常容易.但是我无法通过MS Access进行操作,因为显然它不支持存储过程. 解决方法您可以将记录与用户定义函数(UDF)连接起来.以下代码可以“按原样”粘贴到标准模块中.您的示例的SQL将是: SELECT tbl.A,Concatenate("SELECT B FROM tbl
WHERE A = " & [A]) AS ConcA
FROM tbl
GROUP BY tbl.A
这个代码是由DHookom,Access MVP,从http://www.tek-tips.com/faqs.cfm?fid=4233开始 Function Concatenate(pstrSQL As String,_
Optional pstrDelim As String = ",") _
As String
'example
'tblFamily with FamID as numeric primary key
'tblFamMem with FamID,FirstName,DOB,...
'return a comma separated list of FirstNames
'for a FamID
' John,Mary,Susan
'in a Query
'(This SQL statement assumes FamID is numeric)
'===================================
'SELECT FamID,'Concatenate("SELECT FirstName FROM tblFamMem
' WHERE FamID =" & [FamID]) as FirstNames
'FROM tblFamily
'===================================
'
'If the FamID is a string then the SQL would be
'===================================
'SELECT FamID,'Concatenate("SELECT FirstName FROM tblFamMem
' WHERE FamID =""" & [FamID] & """") as FirstNames
'FROM tblFamily
'===================================
'======For DAO uncomment next 4 lines=======
'====== comment out ADO below =======
'Dim db As DAO.Database
'Dim rs As DAO.Recordset
'Set db = CurrentDb
'Set rs = db.OpenRecordset(pstrSQL)
'======For ADO uncomment next two lines=====
'====== comment out DAO above ======
Dim rs As New ADODB.Recordset
rs.Open pstrSQL,CurrentProject.Connection,_
adOpenKeyset,adLockOptimistic
Dim strConcat As String 'build return string
With rs
If Not .EOF Then
.MoveFirst
Do While Not .EOF
strConcat = strConcat & _
.Fields(0) & pstrDelim
.MoveNext
Loop
End If
.Close
End With
Set rs = Nothing
'====== uncomment next line for DAO ========
'Set db = Nothing
If Len(strConcat) > 0 Then
strConcat = Left(strConcat,_
Len(strConcat) - Len(pstrDelim))
End If
Concatenate = strConcat
End Function (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql-server – 从远程客户端访问Windows Server 2008 R2上的
- 将SQL存储的DateTime值迁移到DateTimeOffset最佳做法?
- 在现有数据库中创建ASP.Net成员资格数据库结构
- sql-server-2005 – SQL Server 2005中与复合主键的外键关系
- sql-server – 资源池“internal”中没有足够的系统内存来运
- MsSQL数据导入到Mongo的默认编码问题(正确导入Mongo的方法)
- Sql(在Oracle上)按天计算老化报告
- SQL SERVER 2008 中三种分页方法与比较
- sql – 什么是VertiPaq及其工作原理
- MySQL禁用InnoDB引擎的方法
