0

抱歉标题不好,很难用一句话来解释我遇到了什么问题。所以我有一个篮球统计数据库。我要做的是将一支球队的统计数据组合成一排,然后将这支球队与之对抗的所有统计数据组合成另一排。如果数据库中有对手的统计数据,我现在所拥有的工作,但可能没有对手的统计数据而只有球队的统计数据。很难解释为什么,所以请继续。

所以假设我有 3 行是这样的:

COMP_ID | TEAM_ID | OFF_REB | DEF_REB
  1     |  100   |   5     |    4
  2     |  100   |   1     |    1
  3     |  100   |   3     |    7

基本上,有3场比赛,我只有100队的数据。我想连续获得第 100 队的所有 OFF 和 DEF 篮板,然后在另一排中获得所有对手的 OFF 和 DEF 篮板。如果没有对手的统计数据,只有 0 就可以了。

仅供参考 - 我现在做的是分组,将团队 100 的统计数据打包在一起,并将对手的统计数据打包在一起。对于对手统计数据的 TEAM_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

使用这个查询,我只得到 1 行,那是团队 100。即使没有可用的统计数据,我如何调整它以获得 -999 行?

编辑以显示所需的结果:

TEAM_ID | REBS
  100   |  21
 -999   |  0

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

4

1 回答 1

2

下面的查询将确保您有 -999,通过将联合添加到您的结果集与 0,即使您已经有 -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
于 2012-11-08T16:27:50.787 回答