2010-03-24 4 views
1

Предположим, что у меня есть таблица (tblEmp), структура которого вроде как подНахождение сотрудников, специфичные для отдела в SQL Server 2000

Dept  Emp 
----- ------ 
d1  e1 
d1  e2 
d1  e3 
d2  e4 
d2  e5 
d3  e6 

Если мне нужно принести выход в

Dept DepartmentSpecificEmployees 
------  ----------------------------  
    d1   e1,e2,e3 
    d2   e4,e5 
    d3   e6 

Я напишу запрос

select 
    Dept, 
    stuff((select ',' + Emp from tblEmp t2 where t1.Dept = t2.Dept for xml path(''),1,1,'')DepartmentSpecificEmployees 
from 
    tblEmp t1 
group by 
    Dept 

Но это будет работать в SQL Se rver 2005+.

Как я могу добиться того же в SQL Server 2000 без объявления переменной или цикла или курсора?

Если я использую COALESCE в качестве альтернативы, то мне нужно использовать переменный, которая будет поражением цели

Пожалуйста, помогите

ответ

2

Вы не можете в SQL Server 2000 без использования скалярного пользователя функции, определенными в SELECT. Это UDF будет иметь локальную переменную (как уже упоминалось) и concats каждую группировку

select 
    Dept, dbo.MyConcatUDF (Dept) 
FROM 
    (SELECT DISTINCT Dept FROM tblEmp) t1 

Или это в клиенте

+0

+1 очень аккуратным ... –

Смежные вопросы