2016-04-08 31 views
-1

我有一个如下产生结果的查询:表中的转换行的值到一个连接字符串

Clients.Firstname Client_ID Employees.firstname 
John     123   Heath 
John     123   Cathy 
John     123   Heidi 
Mary     456   Chris 
Mary     456   Thomas 
Alex     567   Heidi 

理想我想给雇员的名字结合文字的每个记录,以避免多行(这些都是监督员和一个客户端可能有许多监事),即:

John 123 Heath, Cathy, Heidi 
Mary 456 Chris, Thomas 
Alex 567 Heidi 

我一直在阅读有关XML PATH和东西,但因为我,我挣扎了很初级用户,使其工作。任何建议将不胜感激。

这是我的SQL查询:

SELECT CLIENTS.ALIAS, CLIENTS.BIRTHDATE, 
     CLIENTS.CURR_ADDR1, CLIENTS.CURR_ADDR2, 
     CLIENTS.CURR_CITY, CLIENTS.CURR_POST, 
     CLIENTS.CURR_PROV, CLIENTS.EMAILADDR, 
     CLIENTS.FIRSTNAME, CLIENTS.GENDER, 
     CLIENTS.HOME_PHONE, CLIENTS.LASTNAME, 
     CLIENTS.CCELL, CLIENTS.PERMADDR_1, 
     CLIENTS.PERMADDR_2, CLIENTS.PERM_CITY, 
     CLIENTS.PERM_POST, CLIENTS.PERM_PROV, 
     CLIENTS.SALUTATION, CLTDEPT.DEPT_ID, 
     CLTDEPT.STATUS, CLTDEPT.CLTVISITOR_ID, 
     CLIENTS.ETHNICITY, CLIENTS.COUNTRYOFBIRTH, 
     CLIENTS.REFERRAL, CLTSUPERS.SUPER_ID, 
     EMPLOYEES.FIRSTNAME FIRSTNAME_2 

FROM CLIENTS CLIENTS 
     INNER JOIN CLTDEPT CLTDEPT ON 
    (CLTDEPT.CLTVISITOR_ID = CLIENTS.CLIENT_ID) 
     INNER JOIN CLTSUPERS CLTSUPERS ON 
    (CLTSUPERS.CLTVISITOR_ID = CLTDEPT.CLTVISITOR_ID) 
     AND (CLTSUPERS.DEPT_ID = CLTDEPT.DEPT_ID) 
     INNER JOIN EMPLOYEES EMPLOYEES ON 
    (EMPLOYEES.EMP_ID = CLTSUPERS.SUPER_ID) 

WHERE (CLTDEPT.DEPT_ID = 'P123') 
     AND (CLTDEPT.STATUS = 'A') 
     AND (CLIENTS.ATTENDANCE = 'F') 
+2

标签与正在使用的数据库你的问题。 –

+3

您的问题中包含的查询不会在您的示例输出中生成任何字段! –

回答

0

把你的样本数据的例子。

在Oracle中,你可以实现这个查询:

SELECT 
    Name, 
    Id, 
    LISTAGG(Supervisor, ', ') WITHIN GROUP (ORDER BY Supervisor) 
GROUP BY Name, Id 

在MySQL:

SELECT 
    Name, 
    Id, 
    GROUP_CONCAT(Supervisor) 
GROUP BY Name, Id 

如果其他数据库,你可以,如果数据库有类似GROUP_CONCAT功能谷歌。

+0

谢谢。我现在正在使用SQL 2012正确标记。 – Ben

+0

不客气,你有没有解决过这个问题?如果没有,你可以把这个[如何在sql server中使用group_concat进行查询](http://stackoverflow.com/questions/17591490/how-to-make-a-query-with-group-concat-in- sql-server)解决方案。 – Blank

1

我会建议以下答案。请假定@table是您当前使用该值的表格。

declare @table table 
(
    firstname nvarchar(10), 
    ID integer, 
    empfirstname nvarchar(10) 
) 

insert into @table values ('John', 123, 'Heath'); 
insert into @table values ('John', 123, 'Cathy'); 
insert into @table values ('John', 123, 'Heidi'); 
insert into @table values ('Mary', 456, 'Chris'); 
insert into @table values ('Mary', 456, 'Thomas'); 
insert into @table values ('Alex', 567, 'Heidi'); 

select distinct A.ID, A.firstname, STUFF(
(SELECT ',' + B.empfirstname AS [text()] 
from @table B 
where B.ID = A.ID 
Order by B.empfirstname 
for xml PATH('')),1,1,'' ) AS Name 
from @table A 
group by A.ID, A.firstname 

的resultI得到的都是

ID | FirstName|Name 
123 |John  |Cathy,Heath,Heidi 
456 |Mary  |Chris,Thomas 
567 |Alex  |Heidi 
相关问题