对于糟糕的标题,很难用一句话解释我遇到的问题。所以我有一个篮球统计数据库。我想要做的是将一个团队的统计数据分成一行,然后将该团队在另一行中所玩的所有统计数据分组。如果数据库中存在对手统计数据,我现在可以使用的是什么,但是有可能没有对手统计数据而且只有球队统计数据。很难解释原因,所以请继续使用。
所以我想说我有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
当然如果有对手的统计数据,id就像看到他们的REBS值一样。
答案 0 :(得分: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