0

悪いタイトルで申し訳ありません。私が抱えている問題を一言で説明するのは難しいです。だから私はバスケットボールの統計データベースを持っています。私がやろうとしているのは、1 つのチームの統計を 1 つの行にグループ化し、このチームが対戦したすべての統計を別の行にグループ化することです。データベースに対戦相手の統計がある場合、私が今持っているものは機能しますが、対戦相手の統計を持たずにチームの統計だけを持つことは可能です. 理由を説明するのは難しいので、そのまま進んでください。

したがって、次のような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 の統計をまとめてパッケージ化し、対戦相手の統計もまとめてパッケージ化するために group by を実行することです。対戦相手の統計の 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

このクエリでは、チーム 100 の場合は 1 行しか返されません。使用可能な統計がない場合でも、-999 行を取得するように調整するにはどうすればよいですか?

編集して目的の結果を表示します。

TEAM_ID | REBS
  100   |  21
 -999   |  0

もちろん、対戦相手の統計がある場合は、REBS 値を確認したいと思います。

4

1 に答える 1

2

以下のクエリでは、結果セットに 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
于 2012-11-08T16:27:50.787 に答える