2013-09-26 76 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