2017-06-14 97 views
0

我有2個表格(Application,Transaction)。從SQL Server中的多個表中提取記錄 - 棘手

應用

ID  ApplicationName TransactionID 
------------------------------------- 
1    A    100 
2    A    101 
3    B    102 
4    B    103 
  • TransactionID是獨一無二的。
  • 應用程序可以有多個TransactionID's。

交易

ID  TransactionID RequestNumber 
--------------------------------------- 
1   100   RQ1000 
2   101   RQ1000 
3   102   RQ1001 
4   102   RQ1001 
5   102   RQ1002 
  • TransactionID可以有多個RequestNumber
  • Multple TransactionID可以有相同的RequestNumber

現在我的問題是:我想找回它應該是數據如下面

ApplicationName Count(RequestNumber) RequestNumberList 
-------------------------------------------------------- 
     A     1     RQ1000 
     B     2     RQ1001,RQ1002 
  • Count(RequestNumber)應該是不同RequestNumber針對該應用
  • RequestNumberList應該是不同的RequestNumber這是逗號分隔
而不使用下面的查詢第三列

我能得到所需的結果:

SELECT 
    ApplicationName, COUNT(DISTINCT RequestNumber) AS RequestNumber_Count 
FROM 
    Application A 
JOIN 
    Transaction T ON A.TransactionID = T.TransactionID 
GROUP BY 
    ApplicationName 

結果:

ApplicationName Count(RequestNumber) 
------------------------------------- 
     A     1 
     B     2 

對於第三列我寫這樣的:

SELECT 
    ApplicationName, 
    COUNT(DISTINCT RequestNumber) AS RequestNumber_Count, 
    COALESCE(RequestNumber + ', ', '') 
FROM 
    Application A 
JOIN 
    Transaction T ON A.TransactionID = T.TransactionID 
GROUP BY 
    ApplicationName, RequestNumber 

結果:

ApplicationName Count(RequestNumber) RequestNumberList 
--------------------------------------------------------- 
     A     1     RQ1000, 
     B     1     RQ1001, 
     B     1     RQ1002, 

我需要改變我的第二個查詢以獲得期望的結果

在此先感謝。

+0

這已被要求,並回答了幾十個幾十遍。 –

+0

[在Microsoft SQL Server 2005中模擬組\\concat MySQL函數?]的可能的重複項(https://stackoverflow.com/questions/451415/simulating-group-concat-mysql-function-in-microsoft-sql-server-2005 ) –

+0

我有查詢來獲取第二或第三列不是在同一查詢中..其他問題和這個問題是有區別的..請檢查 – Yashas

回答

0

最後實現了JOIN,STUFF,GROUP BY和HAVING子句的組合。

SELECT A.ApplicationName,COUNT(DISTINCT T.RequestNumber) AS RequestNumber_Count, RequestNumberList = STUFF(( SELECT ',' +B.RequestNumber FROM Application D JOIN Trnsaction B ON D.TransactionID=B.TransactionID GROUP BY D.ApplicationName,B.RequestNumber HAVING D.ApplicationName=A.ApplicationName FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') FROM Application A JOIN Trnsaction T ON A.TransactionID=T.TransactionID GROUP BY A.ApplicationName