2015-02-24 136 views
0

我有3個表,即客戶,應用程序,代理。都爲3代表的結構和樣本數據如下SQL組通過逗號和句點連接字符串

Customer 
========== 
PKCustomerID | CustomerName 
1    | Test Customer1 
2    | Test Customer 2 

Application 
============ 
PKApplicationID | ApplicationTitle | FKCustomerID 
1 | TestApplication1 | 1 
2 | TestApplication2 | 1 
3 | Test Application3 | 1 

Agent 
====== 
PKAgentID | AgentName | FKApplicationID | ComparableCode<br> 
1 | AgentName 1 | 1 | AgentCode1 
2 | AgentName 2 | 1 | AgentCode1 
3 | AgentName 3 | 2 | AgentCode2 

現在我需要一個結果是像對於給定的客戶ID

ComparableCode | ApplicationNamer.AgentName | ApplicationCount 
AgentCode1 | TestApplication1.AgentName1,TestApplication1.AgentName2 | 2 

我寫下面的代碼

SELECT ComparableCode, AgentName = 
STUFF((SELECT ', ' + AgentName 
     FROM LNAgent b 
     WHERE b.ComparableCode = a.ComparableCode 
     FOR XML PATH('')), 1, 2, ''), COUNT(PKAgentID) [Application Count] 
FROM LNAgent a 
JOIN LNApplication app 
ON app.PKApplicationID = a.FKApplicationID 
JOIN LNCustomer cust on 
cust.PKCustomerID = app.fkCustomerID 
GROUP BY ComparableCode 
ORDER BY [Application Count] DESC 

以上查詢給我以下結果集

ComparableCode | ApplicationNamer.AgentName | AplicationCount 
AgentCode1 | AgentName1, AgentName 2 | 2 

我無法將ApplicationName包含在ApplicationName.AgentName列中。

請幫助

回答

0

如果我理解您的要求正確,那麼你需要包括LNApplication內部FOR XML子選擇;

SELECT ComparableCode, AgentName = 
STUFF((SELECT ', ' + app2.ApplicationTitle + '.' + a2.AgentName 
     FROM LNAgent a2 
     JOIN LNApplication app2 
     ON app2.PKApplicationID = a2.FKApplicationID 
     WHERE a2.ComparableCode = a.ComparableCode 
     FOR XML PATH('')), 1, 2, ''), COUNT(PKAgentID) [Application Count] 
FROM LNAgent a 
JOIN LNApplication app 
ON app.PKApplicationID = a.FKApplicationID 
JOIN LNCustomer cust on 
cust.PKCustomerID = app.fkCustomerID 
GROUP BY ComparableCode 
ORDER BY [Application Count] DESC