我试图计算每个控制台平台的游戏会话百分比。我根据来自两个不同的sesssions-tables(一个只有一个摘要和一个我总结每个控制台的数据)的数据来计算使用量。这是有效的,我可以在T3中将总nr或会话总和为SessionTotal。所以这段代码几乎可以工作,但似乎无法让外部SELECT进行验证。有人可以帮助我吗?
SELECT T3.Sessions, T3.Console, T3.Sessions * 100 / T2.SessionTotal AS Percentage
FROM
(
-- This call returns a total nr of sessions played
SELECT SUM(Sessions) as SessionTotal
FROM
(SELECT Sessions, Console, SystemID
FROM (SELECT TOP (100) PERCENT ISNULL(MIN(ps.SessionCount), 0) + ISNULL(COUNT(s.system_id), 0) AS Sessions, MIN(c.name) AS Console, MIN(c.id) AS SystemID
FROM dbo.[Systems] AS c LEFT OUTER JOIN
dbo.Sessions AS s ON c.id = s.system_id LEFT OUTER JOIN
dbo.PreviousSessions AS ps ON c.id = ps.SystemID
GROUP BY c.id) AS T1) as T2,
-- This call returns nr of sessions per system
SELECT Sessions, Console, SystemID
FROM (SELECT TOP (100) PERCENT ISNULL(MIN(ps.SessionCount), 0) + ISNULL(COUNT(s.system_id), 0) AS Sessions, MIN(c.name) AS Console, MIN(c.id) AS SystemID
FROM dbo.[Systems] AS c LEFT OUTER JOIN
dbo.Sessions AS s ON c.id = s.system_id LEFT OUTER JOIN
dbo.PreviousSessions AS ps ON c.id = ps.SystemID
GROUP BY c.id) AS T3
)
答案 0 :(得分:0)
declare @SessionTotal float =
(
SELECT SUM(Sessions) as SessionTotal
FROM
(SELECT Sessions, Console, SystemID
FROM (
SELECT TOP (100) PERCENT ISNULL(MIN(ps.SessionCount), 0) + ISNULL(COUNT(s.system_id), 0) AS Sessions, MIN(c.name) AS Console, MIN(c.id) AS SystemID
FROM dbo.[Systems] AS c
LEFT OUTER JOIN dbo.Sessions AS s
ON c.id = s.system_id
LEFT OUTER JOIN dbo.PreviousSessions AS ps
ON c.id = ps.SystemID
GROUP BY c.id) AS T1
) as T2
)
SELECT Sessions, Console,Sessions * 100/@SessionTotal AS Percentage
FROM (
SELECT TOP (100) PERCENT ISNULL(MIN(ps.SessionCount), 0) + ISNULL(COUNT(s.system_id), 0) AS Sessions, MIN(c.name) AS Console, MIN(c.id) AS SystemID
FROM dbo.[Systems] AS c
LEFT OUTER JOIN dbo.Sessions AS s
ON c.id = s.system_id
LEFT OUTER JOIN dbo.PreviousSessions AS ps
ON c.id = ps.SystemID
GROUP BY c.id
) AS T3