Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 当特定行不存在时要处理的数据库查询_Sql_Sql Server_Database - Fatal编程技术网

Sql 当特定行不存在时要处理的数据库查询

Sql 当特定行不存在时要处理的数据库查询,sql,sql-server,database,Sql,Sql Server,Database,很抱歉标题不好,很难用一句话来解释我有什么问题。所以我有一个篮球统计数据库。我想做的是将一队的数据分组在一行,然后将该队与之对抗的所有数据分组在另一行。如果数据库中有对手的统计数据,那么我现在所做的就可以了,但也有可能没有对手的统计数据,而只有球队的统计数据。很难解释为什么,所以请继续 假设我有3行,如下所示: COMP_ID | TEAM_ID | OFF_REB | DEF_REB 1 | 100 | 5 | 4 2 | 100 |

很抱歉标题不好,很难用一句话来解释我有什么问题。所以我有一个篮球统计数据库。我想做的是将一队的数据分组在一行,然后将该队与之对抗的所有数据分组在另一行。如果数据库中有对手的统计数据,那么我现在所做的就可以了,但也有可能没有对手的统计数据,而只有球队的统计数据。很难解释为什么,所以请继续

假设我有3行,如下所示:

COMP_ID | TEAM_ID | OFF_REB | DEF_REB
  1     |  100   |   5     |    4
  2     |  100   |   1     |    1
  3     |  100   |   3     |    7
基本上,有3场比赛,我只有100队的数据。我想把100队的所有篮板都排在一行,然后把对手的所有篮板都排在另一行。如果没有对手的统计数据,只要0就可以了

仅供参考-我现在做的是分组,将100队的数据打包在一起,并将对手的数据打包在一起。对于对手统计数据的团队ID,我将它们分组为-999值,这样我就知道它们是对手的值

以下是我现在的疑问:

SELECT CASE WHEN TEAM_ID <> 100 THEN -999 ELSE 100 END AS TEAM_ID, SUM(OFF_REB+DEF_REB) REBS
FROM V_STATS_COMP
WHERE COMP_ID IN (SELECT COMP_ID FROM COMPETITIONS WHERE HOME_ID = 100 OR VIS_ID = 100)
GROUP BY CASE WHEN TEAM_ID <> 100 THEN -999 ELSE 100 END
ORDER BY TEAM_ID

当然,如果有对手的统计数据,我希望看到他们的REBS值。

下面的查询将通过将union添加到结果集0来确保您有-999,并且即使您已经有-999,它也不会影响您的结果总和:

    SELECT
         TEAM_ID
        ,SUM(REBS) REBS
    FROM
        (
            SELECT 
                  CASE WHEN TEAM_ID <> 100 THEN -999 ELSE 100 END AS TEAM_ID
                , ISNULL(OFF_REB,0)+ISNULL(DEF_REB,0) REBS
            FROM 
                V_STATS_COMP
            WHERE 
                COMP_ID IN (SELECT COMP_ID FROM COMPETITIONS WHERE HOME_ID = 100 OR VIS_ID = 100)
            UNION
            SELECT -999 TEAM_ID, 0 REBS
        ) as vwStats
    GROUP BY 
        vwStats.TEAM_ID
    ORDER BY 
        vwStats.TEAM_ID DESC

如果单独运行子查询,它将返回什么?在本例中,它将返回1,2,3所有3个竞争。如果将来比赛还没有开始,它可能会带来更多的比赛。所以它可能是1,2,3,4,5,6…100。你能发布一个你想看到的结果的例子吗?当然,刚刚编辑了这篇文章。它在底部。当我运行此查询时,我很接近,但是我得到了团队100的-999行的REBS值。这是指向返回结果集的工作代码的链接,如示例中所示:您是对的。我会看看我做错了什么。你的例子似乎在链接中起作用。好吧,我搞砸了。我相信你的确实管用。我和另一支球队进行了测试,他们恰好和真正的球队一样。我连续两次对一支球队进行测试,所有对手的总数都等于该队的价值。谢谢
    SELECT
         TEAM_ID
        ,SUM(REBS) REBS
    FROM
        (
            SELECT 
                  CASE WHEN TEAM_ID <> 100 THEN -999 ELSE 100 END AS TEAM_ID
                , ISNULL(OFF_REB,0)+ISNULL(DEF_REB,0) REBS
            FROM 
                V_STATS_COMP
            WHERE 
                COMP_ID IN (SELECT COMP_ID FROM COMPETITIONS WHERE HOME_ID = 100 OR VIS_ID = 100)
            UNION
            SELECT -999 TEAM_ID, 0 REBS
        ) as vwStats
    GROUP BY 
        vwStats.TEAM_ID
    ORDER BY 
        vwStats.TEAM_ID DESC