当前位置: 代码迷 >> Sql Server >> 求教一个 复杂sql的写法解决办法
  详细解决方案

求教一个 复杂sql的写法解决办法

热度:57   发布时间:2016-04-24 19:27:16.0
求教一个 复杂sql的写法
一个会议通知模块,涉及4个表
表1,会议表:t_Meeting
meeting_id    subject     begin_time         end_time            room_id
1              会议1      2013-12-10 10:00   2013-12-10 10:00     1
2              会议2      2013-12-10 14:00   2013-16-10 10:00     2

表2,会议室表:t_Room
room_id    room_name
1           第一会议室
2           第二会议室

表3,参会部门表:t_MeetingDep
meeting_id   dep_id
1             1
1             2
2             2
2             4

表4,部门表:
dep_id   dep_name
1         财务部
2         信息部
3         综合部
4         市场部

希望得到如下结果
会议编号   会议名称  会议室         参会部门           开始时间             结束时间
1          会议1     第一会议室     财务部,信息部     2013-12-10 10:00    2013-12-10 10:00  
2          会议2     第二会议室     信息部,市场部     2013-12-10 14:00    2013-16-10 10:00

请问该如何写sql来实现,谢谢!

------解决方案--------------------
FOR XML PATH('')
合并行!
应该就这一个技术点吧....
------解决方案--------------------
select distinct
       m.meeting_id 会议编号,
       m.subject 会议名称,
       r.room_name 会议室,
       stuff(
              (select ','+md.dep_name
               from t_MeetingDep md 
               inner join 部门表 d
                       on d.dep_id = md.dep_id
               where r.meeting_id = md.meeting_id
               for xml path('')
              ),1,1,''
            ) as 参会部门,
            
       m.begin_time 开始时间,
       m.end_time 结束时间    
            
from t_Meeting m
inner join t_Room r
        on m.room_id = r.room_id

------解决方案--------------------
----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2013-12-11 14:57:21
-- Version:
--      Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 
-- Dec 28 2012 20:23:12 
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
--
----------------------------------------------------------------
--> 测试数据:[t_Meeting]
  相关解决方案