我有2个表(应用程序,事务)。
申请
ID ApplicationName TransactionID
-------------------------------------
1 A 100
2 A 101
3 B 102
4 B 103
TransactionID
是唯一的。 交易
ID TransactionID RequestNumber
---------------------------------------
1 100 RQ1000
2 101 RQ1000
3 102 RQ1001
4 102 RQ1001
5 102 RQ1002
TransactionID
可以包含多个RequestNumber
TransactionID
可以拥有相同的RequestNumber
现在我的问题是:我想检索它应该如下所示的数据
ApplicationName Count(RequestNumber) RequestNumberList
--------------------------------------------------------
A 1 RQ1000
B 2 RQ1001,RQ1002
Count(RequestNumber)
应该与该应用程序不同RequestNumber
RequestNumberList
应该是逗号分隔的RequestNumber
我可以使用以下查询获得第3列所需的结果:
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
在第3栏我写的是这样的:
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)
最后通过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