/****************************************************************************************
单个交互及其所有子实体的深度解析快照
****************************************************************************************/
DECLARE @TenantId INT = 1; -- 🔧 根据需要设置
DECLARE @AutoAttendantId INT = 42; -- 🔧 AA过滤器
DECLARE @InteractionsTypeId INT = 3; -- 🔧 类型过滤器
DECLARE @InteractionId BIGINT = 100001; -- 🔧 主角
;WITH base AS ( -- 🎬 在CTE中建立中心
SELECT i.Id
FROM dbo.Interactions AS i
WHERE i.TenantId = @TenantId
AND i.InteractionsTypeId = @InteractionsTypeId
AND i.Id = @InteractionId
)
SELECT
b.Id AS InteractionId,
/*—— 核心AA调用(必须存在)——*/
COUNT(DISTINCT ac.Id) AS AACallsCount,
/*—— 可选日志和卫星——*/
COUNT(DISTINCT acl.Id) AS AACallsLogCount,
COUNT(DISTINCT ifs.Id) AS FinalStatusCount,
COUNT(DISTINCT ia.Id) AS AgentsCount,
COUNT(DISTINCT ial.Id) AS AgentsLogCount,
COUNT(DISTINCT icb.Id) AS CallbacksCount,
COUNT(DISTINCT icbl.Id) AS CallbacksLogCount,
COUNT(DISTINCT ifl.Id) AS FlowsCount,
COUNT(DISTINCT ifll.Id) AS FlowsLogCount,
COUNT(DISTINCT r.Id) AS RecordingsCount,
COUNT(DISTINCT rl.Id) AS RecordingsLogCount
FROM base AS b
/*---------------------------------------------------------
INNER JOIN ➜ 强制执行AA过滤器(交互**必须**出现在
具有选定AutoAttendantId的AACalls中)
---------------------------------------------------------*/
INNER JOIN dbo.AACalls AS ac
ON ac.InteractionId = b.Id
AND ac.AutoAttendantId = @AutoAttendantId
/*---------------------------------------------------------
LEFT JOINs ➜ 即使卫星为空也保持中心行
---------------------------------------------------------*/
LEFT JOIN dbo.AACallsLog AS acl ON acl.InteractionId = b.Id
LEFT JOIN dbo.InteractionFinalStatus AS ifs ON ifs.InteractionId = b.Id
LEFT JOIN dbo.InteractionsAgents AS ia ON ia.InteractionId = b.Id
LEFT JOIN dbo.InteractionsAgentsLog AS ial ON ial.InteractionId = b.Id
LEFT JOIN dbo.InteractionsCallbacks AS icb ON icb.InteractionId = b.Id
LEFT JOIN dbo.InteractionsCallbacksLog AS icbl ON icbl.InteractionId = b.Id
LEFT JOIN dbo.InteractionsFlows AS ifl ON ifl.InteractionId = b.Id
LEFT JOIN dbo.InteractionsFlowsLog AS ifll ON ifll.InteractionId = b.Id
LEFT JOIN dbo.Recordings AS r ON r.InteractionId = b.Id
LEFT JOIN dbo.RecordingsLog AS rl ON rl.InteractionId = b.Id
GROUP BY
b.Id;
GO