(SELECT SUM(Amount)
FROM GameLose
INNER JOIN Game ON Game.Id = GameLose.GameID
INNER JOIN Provider ON Game.ProviderID = Provider.Id
WHERE MONTH(LoseDate)=6 AND YEAR(LoseDate)=2016
GROUP BY MONTH(LoseDate),YEAR(LoseDate),Provider.Name)
(SELECT SUM(Amount)
FROM GameWin
INNER JOIN Game ON Game.Id = GameWin.GameID
INNER JOIN Provider ON Game.ProviderID = Provider.Id
WHERE MONTH(WinDate)=6 AND YEAR(WinDate)=2016
GROUP BY MONTH(WinDate),YEAR(WinDate),Provider.Name)
我的目标是产生一个由每月游戏胜负组成的收入。上面的查询的问题是我希望通过对结果进行分组来对每个游戏提供者执行计算,我得到与提供者名称列有关的错误。如何在不收到此错误的情况下为每个提供商生成收入结果(游戏胜率低于每月游戏损失):
子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
答案 0 :(得分:0)
请您查看以下SQL CTE Select声明
我希望它有所帮助
;with loses as (
SELECT
Provider.Id, Provider.Name, YEAR(LoseDate) Y, MONTH(LoseDate) M, SUM(Amount) as Amount
FROM GameLose
INNER JOIN Game ON Game.Id = GameLose.GameID
INNER JOIN Provider ON Game.ProviderID = Provider.Id
WHERE
MONTH(LoseDate)=6 AND
YEAR(LoseDate)=2016
GROUP BY
MONTH(LoseDate),
YEAR(LoseDate),
Provider.Name,
Provider.Id
), wins as (
SELECT
Provider.Id, Provider.Name, YEAR(WinDate) Y, MONTH(WinDate) M, SUM(Amount) as Amount
FROM GameWin
INNER JOIN Game ON Game.Id = GameWin.GameID
INNER JOIN Provider ON Game.ProviderID = Provider.Id
WHERE
MONTH(WinDate)=6 AND
YEAR(WinDate)=2016
GROUP BY
MONTH(WinDate),
YEAR(WinDate),
Provider.Name,
Provider.Id
)
select
isnull(wins.Id, loses.Id)
Id,
isnull(wins.Name, loses.Name) Name,
isnull(wins.Y, loses.Y) [Year],
isnull(wins.M, loses.M) [Month],
isnull(wins.Amount, 0) - isnull(loses.Amount, 0) as Net
from wins
full join loses
on wins.Id = loses.Id