2013-09-26 33 views
1

这是一个有客户端ID为电话表需要解决方案。 2行到1行SQL Server 2008中

(ClientID int Primary key, 
FName varchar(25), 
LName varchar(25), 
HomeAddress varchar(50)) 

CREATE TABLE Telephone 
(TelephoneID tinyint IDENTITY(1,1)Primary key, 
TelephoneNo int, 
ClientID int foreign key references Client(ClientID)) 

,所以我的2规范化表为我的客户表中的值..

ClientID | FName | LName | HomeAddress 
    1  marvin Biu p.guevarra st. 
    2  harry sendon  cali st. 

,进入我的电话表..

TelephoneID | TelephoneNo | ClientID 
     1  1234567  1 
     2  7654321  1 
     3  2222222  2 

,因为它可能是一个客户端有多个电话没有 所以我想变成这个样子。 。

ClientID | FName | LName | HomeAddress | Telephones 
    1  marvin Biu p.guevarra st. 1234567, 7654321 
    2  harry sendon  cali st.   2222222 

我只能拿出这样

select distinct lname, CAST(telephoneno AS VARCHAR(10)) + ',' + CAST(telephoneno AS VARCHAR(10)) as Telephones 
from telephone 
left join client 
on client.clientid = telephone.clientid 

弄成这个样子的代码..

LName | Telephones 
Biu  1234567, 1234567 
Biu  7654321, 7654321 
sendon  2222222 

请任何人的帮助,其确定该表中结束了简单的形式如上所示, 我真的希望1234567 telephoneno加入与7654321 telephoneno昏迷之间的电话列与一个Lname“Biu”列。这使得1排。 :/

回答

1
SELECT 
    lname, 
    Telephones = STUFF((SELECT ','+ CAST(t.telephoneno AS VARCHAR(10)) 
    FROM telephone t 
    WHERE t.clientid = c.clientid 
    For XML PATH('') 
),1,1,'') 
FROM client c 
+0

可以请您给我解释一下你怎么做的,什么是XML路径和T和你放? –

+0

@MharveenBiu。对于XML,这是如何获得串联字符串:http://technet.microsoft.com/en-us/library/ms190922(v=sql.110).aspx。 t和c只是表别名 – EricZ

0

始终符合你的表中加入,这使得它更清楚地看到发生了什么事情:

select distinct t.lname, CAST(t.telephoneno AS VARCHAR(10)) + ',' + CAST(c.telephoneno AS VARCHAR(10)) as Telephones 
from telephone t 
left join client c 
on c.clientid = t.clientid