Sql server 乘以SQL中的实例数

Sql server 乘以SQL中的实例数,sql-server,sql-server-2014,Sql Server,Sql Server 2014,我有一个数据库,我需要查询它来计算和计算篮球比赛中球员传球所产生的点数。例如,如果一名球员传球给一名队友并得到2分,我的数据库当前将其作为1个实例存储在某个表中。如果传递结果为3分,则数据存储在另一个表中。我想查询一下,一个球员传球的所有结果都是2分,然后乘以2,一个球员传球的所有结果都是3分,然后乘以3 以下是我的相关表格和select语句: CREATE TABLE Passer( PasserID int identity PRIMARY KEY not null , Forename c

我有一个数据库,我需要查询它来计算和计算篮球比赛中球员传球所产生的点数。例如,如果一名球员传球给一名队友并得到2分,我的数据库当前将其作为1个实例存储在某个表中。如果传递结果为3分,则数据存储在另一个表中。我想查询一下,一个球员传球的所有结果都是2分,然后乘以2,一个球员传球的所有结果都是3分,然后乘以3

以下是我的相关表格和select语句:

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
当我从TwoPointsFromShot表查询PasseId时,我收到一个如下表:

                    | PasserID
------------------- | -------- 
              1     |  1
              2     |  3
              3     |  3
              4     |  2
从ThreePointsFromShot表查询PasseId时,我收到一个类似的表

                      | PasserID
--------------------- | --------
              1       |   3
              2       |   1
              3       |   3
              4       |   4
我想返回一个查询,该查询计算来自TwoPointsFromShot的PasseId实例数并将其乘以2,计算来自TwoPointsFromShot的PasseId实例数并将其乘以3,将两个值相加,并将PasseId替换为玩家名称。如果Julius Randle是PlayerID 1,Dario Saric是PlayerID 2,TJ McConnell是PlayerID 3,Brandon Ingram是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

任何帮助都将不胜感激

我使用了两个,就能得到你想要的结果


谢谢,杰森。我想我需要更新我原来的问题,因为它不清楚。您生成的查询完全符合我的要求。但是,当我运行它时,它只生成在TwoPointsFromShot和ThreePointsFromShot表中标识的名称。我需要一个从两个表中生成所有人的表,并在可能的情况下将它们合并。我将更新我的原始语句以使其更清晰。@Jason的更新:我将连接更改为左连接,这修复了我上面概述的问题,但现在我在玩家没有值的列中创建空值,这将在添加PassToPoint列时在PassToPoint列中生成空值。我正在寻找使空值立即显示为0的方法。@Jason的更新:我对上一个SELECT语句中的所有值使用了ISNULL函数来生成我正在寻找的答案。我将用你的代码发布答案,我想给你信用。我只是不完全确定如何导航,所以我会发布答案,让你编辑它/将其作为自己的答案发布,然后我会给你投票。@KyleF我修改了添加左连接和ISNULL的代码。
--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