2017-06-17 11 views
0

私は、バスケットボールゲームでプレーヤーからのパスによって生成されたポイントの数を数え、合計するために照会する必要があるデータベースを持っています。たとえば、プレーヤーがチームメートに通ってそのパスの結果が2ポイントになった場合、私のデータベースは現在、そのテーブルを特定のテーブルに1インスタンスとして保存しています。パスが3ポイントになった場合にデータが格納される別のテーブルがあります。私は、2点を結果とするプレーヤーからのパスのすべてのインスタンスがカウントされ、次に2が掛け算され、3点の結果となるプレーヤーからのパスのすべてのインスタンスがカウントされ、3が乗算されるように照会したいと思います。ここでSQLでのインスタンス数の掛け算

は私の関連するテーブルとSELECT文です:私はTwoPointsFromShotテーブルからPasserIDを照会すると

CREATE TABLE Passer(
PasserID int identity PRIMARY KEY not null 
, Forename char(30) not null 
, Surname char (30) not null) 

CREATE TABLE Teammate(
TeammateID int identity PRIMARY KEY not null 
, Forename char(30) not null 
, Surname char(30) not null 
, PasserID int FOREIGN KEY REFERENCES Passer(PasserID) not null) 

CREATE TABLE TwoPointsFromShot(
    TwoPointsFromShotID int identity PRIMARY KEY not null 
    , PasserID int FOREIGN KEY REFERENCES Passer(PasserID) not null 
    , TeammateID int FOREIGN KEY REFERENCES Teammate(TeammateID) not null) 

CREATE TABLE ThreePointsFromShot(
    ThreePointsFromShotID int identity PRIMARY KEY not null 
    , PasserID int FOREIGN KEY REFERENCES Passer(PasserID) not null 
    , TeammateID int FOREIGN KEY REFERENCES Teammate(TeammateID) not null 

--First and Last Name of Passer from TwoPointsFromShot-- 
SELECT Forename, Surname 
FROM Passer 
JOIN TwoPointsFromShot ON TwoPointsFromShot.PasserID = Passer.PasserID 

--First And Last name of Passer from ThreePointsFromShot-- 
SELECT Forename, Surname 
FROM Passer 
JOIN ThreePointsFromShot ON ThreePointsFromShot.PasserID = Passer.PasserID 

は、私は次のようになり、テーブルを受け取る:

    | PasserID 
------------------- | -------- 
       1  | 1 
       2  | 3 
       3  | 3 
       4  | 2 

私は同様のテーブルを受け取りますThreePからPasserIDを問い合せるときointsFromShotテーブル。

     | PasserID 
--------------------- | -------- 
       1  | 3 
       2  | 1 
       3  | 3 
       4  | 4 

私はTwoPointsFromShotからPasserIDのインスタンスの数をカウントし、2で、3で、2を加算することをThreePointsFromShotと倍数からPasserIDのインスタンスの数をカウントすることを乗算したクエリを返したいです値を入力し、PasserIDをプレーヤーの名前に置き換えます。だから、この(ジュリアス・ランドルがPlayerID 1であれば、ダリオ・サリッチがPlayerID 2で、TJマコーネルはPlayerID 3で、ブランドンイングラムがPlayerID 4である)のようになります。

| PasserName | PointsFromTwo | PointsFromThree | PassToPoints 
--- | ---------  | --------------- | ------------------ | ------------ 
    1 | Julius Randle |  2   |  3   |  5 
    2 | Dario Saric |  2   |  0   |  2 
    3 | TJ McConnell |  4   |  6   |  10 
    4 | Brandon Ingram|  0   |  3   |  3 

任意の助けいただければ幸いです!

答えて

1

2つのcommon table expressionsを使用して、必要な結果を得ることができました。

--CTE to get number of 2 pointers 
WITH twoPointers AS 
(
    SELECT PasserId,COUNT(*) '2ptCount' 
    FROM TwoPointsFromShot 
    GROUP BY PasserID 
), 
--CTE to get number of 3 pointers 
threePointers As 
(
    SELECT PasserId,COUNT(*) '3ptCount' 
    FROM ThreePointsFromShot 
    GROUP BY PasserID 
) 
--Join the Passer table with 2 CTE's and 
--calculate results 
SELECT RTRIM(Forename) + ' ' + RTRIM(Surname) AS 'PasserName', 
     ISNULL(two.[2ptCount] * 2, 0.00) AS 'PointsFromTwo', 
     ISNULL(three.[3ptCount] * 3, 0.00) AS 'PointsFromThree', 
     ISNULL(two.[2ptCount] * 2, 0.00) + ISNULL(three.[3ptCount] * 3, 0.00) AS 'PassToPoints' 
FROM Passer p 
    LEFT JOIN twoPointers two ON p.PasserID = two.PasserID 
    LEFT JOIN threePointers three ON p.PasserID = three.PasserID 
+0

ありがとう、@ジェイソン。私は元の質問を更新する必要があると思います。明らかではないためです。あなたが作成したクエリは、私が尋ねたものとまったく同じです。しかし、私がそれを実行すると、TwoPointsFromShotとThreePointsFromShotテーブルの両方で識別される名前だけが生成されます。私は両方のテーブルから誰もを作り出すテーブルが必要であり、可能であればそれらを組み合わせます。元の声明をより明確に更新するつもりです。 – KyleF

+0

@Jasonの更新: LEFT JOINS(LEFT JOINS)に変更しました。LEFT JOINSは、上で概説した問題を修正しましたが、現在、NULL値を生成する値をプレーヤーが持たない列にNULL値を作成していますそれらが追加されるときにPassToPoint列に表示されます。ヌル値を持つ方法を探していますが、今は0と表示されています。 – KyleF

+0

@ JasonのUPDATE:最後のSELECT文のすべての値にISNULL関数を使用して、私が探している答えを生成しました。あなたのコードを使って回答を投稿し、あなたに信用を与えたいと思います。私はそれをどのようにナビゲートするのか完全には分かっていないので、私は答えを投稿し、あなたがそれを編集して、自分のものとして掲示し、私にあなたに投票をさせる。 – KyleF