sql合并字段记录

想飞的菜鸟 2012-05-18 10:44:13
已知条件:
一个表名称为【表】的ACCESS数据库表,里面有【部门】和【姓名】两个字段。格式如下:
部门 姓名
甲 甲1
甲 甲2
甲 甲3
甲 甲4
乙 乙1
乙 乙2
乙 乙3

希望生成查询结果:
部门 姓名
甲 甲1,甲2,甲3,甲4
乙 乙1,乙2,乙3

请问用SQL如何实现呢?最好能在ACCESS可用。谢谢各位老师。
...全文
274 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
想飞的菜鸟 2012-05-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
这样:select 部门 ,convert(姓名 as varchar(30)) from 表 group by 部门 FOR XML PATH('')
[/Quote]
经测试,不能在查询设计中使用,然后根据3楼语句在度娘查询,发现了下面满足我要求的语句:
http://www.cnblogs.com/doubleliang/archive/2011/07/06/2098775.html
然而遗憾的是,在ACCESS中,同样无法使用。
想飞的菜鸟 2012-05-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
这样:select 部门 ,convert(姓名 as varchar(30)) from 表 group by 部门 FOR XML PATH('')
[/Quote]
谢谢,我先测试试试。
libystu 2012-05-18
  • 打赏
  • 举报
回复
这样:select 部门 ,convert(姓名 as varchar(30)) from 表 group by 部门 FOR XML PATH('')
想飞的菜鸟 2012-05-18
  • 打赏
  • 举报
回复
感谢楼上回复,因为函数太慢,所以想用SQL处理,在其他ACCESS论坛提问过,至今仍未解决,但是,我司使用的考勤管理系统出来的查询报表,却可以实现这种功能,所以,我想SQL应该也能实现。
快溜 2012-05-18
  • 打赏
  • 举报
回复
写个函数吧,或者去ACCESS版
想飞的菜鸟 2012-05-18
  • 打赏
  • 举报
回复
谢谢各位帮助。
WWWWA 2012-05-18
  • 打赏
  • 举报
回复
SQL+VBA解决,只能在ACCESS中使用
示例

select id,max(dc(dd)) from tt group by id
模块:
Function dc(ByVal dd As Integer) As String
f1 = ""
Set rs = CurrentDb.OpenRecordset("select v from ttz where c=" & dd)
Do While Not rs.EOF
MsgBox rs(0)
f1 = f1 & rs(0) & "+"
rs.MoveNext
Loop
dc = Left(f1, Len(f1) - 1)
End Function
中国风 2012-05-18
  • 打赏
  • 举报
回复
如果有安装SQL 2005以上版本,可用MSSQL连接ACCESS方法以用上语句也是可以的

连接服务器或OPENROWSET
如:
SELECT CustomerID, CompanyName
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';
'admin';'',Customers);
GO
中国风 2012-05-18
  • 打赏
  • 举报
回复
Access? 看错

---
这直接用sql不行,估计需要用VBA实现

给你转到ACCESS版
中国风 2012-05-18
  • 打赏
  • 举报
回复
use Tempdb
go
--> -->

if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([部门] nvarchar(1),[姓名] nvarchar(2))
Insert #T
select N'甲',N'甲1' union all
select N'甲',N'甲2' union all
select N'甲',N'甲3' union all
select N'甲',N'甲4' union all
select N'乙',N'乙1' union all
select N'乙',N'乙2' union all
select N'乙',N'乙3'
Go
Select [部门],[姓名]=STUFF((SELECT ','+[姓名] FROM #T WHERE 部门=a.部门 FOR XML PATH('')),1,1,'')
from #T AS a
GROUP BY [部门]
/*
部门 姓名
甲 甲1,甲2,甲3,甲4
乙 乙1,乙2,乙3
*/

7,732

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
社区管理员
  • Access
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧