SQL文实现,一对多数据合并

前一段时间由于项目的需要,受一个同事的启发写一段SQL文,觉的具有一定的代表性,所以把它记下来以供参考.

大意是有一个部门表和一个员工表,现在需要使用一条查询语句将部门信息以及该部门的所有员工列出来,一个部门使用一条记录,员工间使用逗号分隔.这里至所以有这样的要求完全是从项目框架以及数据传递的方便性来考虑.

SQL文实现,一对多数据合并

(deparments)

SQL文实现,一对多数据合并

(employees)

以上两张表是临时找来做测试的,对于数据意义不要追究.deparments表中deptid是部门ID,deptname是部门名称.employees表中mgrid是部门ID,empname是员工名称.结果图忘了抓了.SQL文实现,一对多数据合并

SELECT  deptname,
        max(empname)
FROM(
     SELECT d.deptid,
            d.deptname,
            e.empid
     FROM Departments d,Employees e
     WHERE deptid = mgrid) temp1
OUTER APPLY(
     SELECT empname = STUFF(REPLACE(REPLACE((SELECT FROM WHERE e.mgrid = AA.deptid FOR XML AUTO),'<e empname="',','),'"/>',''),1,1,'')
           )temp2
GROUP BY deptname,empname

 

大概的效果应该是这样的.

deptname|empname

-----------------

      HR|Andrew,Janet,Margaret

Marketing|Steven,Michael

使用的前提是对性能要求不是很高.

该SQL文已经在SQL Server2005上测试过了,2003没有测试(不一定支持).这个SQL文勉强实现了想要的结果,但是写的连我自己都觉的想吐.SQL文实现,一对多数据合并

仅为需要的朋友题目供一些参考,除了特别需要之外,真的不建议这样写SQL文.SQL文实现,一对多数据合并      

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值