从2个sql查询中减去结果,没有限制

问题描述 投票:0回答:1
    (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。当子查询跟随=,!=,<,<=,>,> =或子查询用作表达式时,不允许这样做。

sql
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.