Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查询以从3个表中获取结果_Sql_Sql Server - Fatal编程技术网

Sql 查询以从3个表中获取结果

Sql 查询以从3个表中获取结果,sql,sql-server,Sql,Sql Server,我需要的是存储过程,根据3个表给出以下结果: 我得到的是: 表1:TBL_用户 userid Client_name ------ -------- 2101 client 1 2102 client 2 2105 client 3 2106 client 4 表2:账户余额 Acbc_UserID Acbc_Remained ----------- ------------- 2101 2.32 2102

我需要的是存储过程,根据3个表给出以下结果:

我得到的是:

表1:TBL_用户

userid   Client_name
------   --------
2101     client 1
2102     client 2
2105     client 3
2106     client 4
表2:账户余额

Acbc_UserID    Acbc_Remained
-----------    -------------
2101           2.32
2102           2.727
2105           223.783
2106           26.77
表3=opper_价格

Opprice_UserID  Opprice_Price
-------         -------
2101            0.008
2101            0.008
2101            0.008
2101            0.008
2102            0.009
2102            0.009
2102            0.009
2102            0.009
2105            0.009
2105            0.009
2105            0.009
2105            0.009
2106            0.010
2106            0.010
2106            0.010
2106            0.010
(这里我们需要一个平均值,例如
user_id 2106
有4个价格,因此我们需要得到平均值,该平均值再次为0.009)

根据上表,我希望得到以下结果:

如果用户id在表3中不存在,则使用0.006的平均价格

Client_Name   average_price    Acbc_Remained     SMS_remain
Client 1      0.008            2.32             ( Acbc_Remained /average_price)
Client 2      0.009            2.727             (2.727/0.009=303)
Client 3      0.009            223.783           24864.7778
Client 4      0.010            26.77             2677

                                                 ========
                                                 Total of column SMS_remain
所以我想做的是将这个存储过程添加到SQL Server电子邮件中,这样整个结果表也将被发送

这是我到目前为止所做的,但价格为零:

BEGIN
   SET NOCOUNT ON;

  SELECT Prj_Users.Users_ID
        ,Prj_Users.Users_Name   AS prj_users
        ,Prj_AccountBalance.Acbc_Remained   AS Prj_AccountBalance
        ,Prj_OpperPrice.Opprice_Price   AS Price

  FROM Prj_Users LEFT JOIN Prj_AccountBalance
  ON Prj_Users.Users_ID = Prj_AccountBalance.Acbc_UserID
  LEFT JOIN Prj_OpperPrice
  ON Prj_OpperPrice.Opprice_UserID = Prj_OpperPrice.Opprice_Price

END
多谢各位

Select Client_Name
      ,average_price = avg(Opprice_Price)
      ,Acbc_Remaind  = avg(Acbc_Remained)
      ,SMS_Remain    = case when avg(Opprice_Price)=0 then 0 else avg(Acbc_Remained)/avg(Opprice_Price) end
 From TBL_User A 
 Join opper_price B on (A.userid=B.Opprice_UserID)
 Join Accountbalance C on (A.userid=C.Acbc_UserID)
 Group By Client_Name
返回

Client_Name average_price   Acbc_Remaind    SMS_Remain
client 1    0.008           2.32            290.00
client 2    0.009           2.727           303.00
client 3    0.009           223.783         24864.7777
client 4    0.01            26.77           2677.00
这一项包括总计,并减少了冗余计算:

Select A.*
      ,SMS_Remain    = case when average_price=0 then 0 else Acbc_Remaind/average_price end
      ,Total_SMS_Remain =SUM(case when average_price=0 then 0 else Acbc_Remaind/average_price end) OVER () 
 From (
          Select Client_Name
                ,average_price = isnull(avg(Opprice_Price),.006)
                ,Acbc_Remaind  = isnull(avg(Acbc_Remained),0)
            From @TBL_User A 
            Left Join @opper_price B on (A.userid=B.Opprice_UserID)
            Left Join @Accountbalance C on (A.userid=C.Acbc_UserID)
            Group By Client_Name

      ) A
返回

Client_Name average_price   Acbc_Remaind    SMS_Remain  Total_SMS_Remain
client 1    0.008           2.32            290.00      28134.7777
client 2    0.009           2.727           303.00      28134.7777
client 3    0.009           223.783         24864.7777  28134.7777
client 4    0.01            26.77           2677.00     28134.7777
client 5    0.006           0.00            0.00        28134.7777

注意:在客户端5上,Acbc_Remaind上的.0006和0是通过使用ISNULL()函数来完成的

,这样听起来就不会像是简单地外包了一些工作,因此,最好是同时发布您迄今为止尝试过的查询,以及您需要帮助的地方。您当前的查询是什么,出现了什么错误?说你需要什么不是一个问题,所以现在还不清楚你在问什么。问题是我知道如何进行连接,但我不知道如何创建它们不存在的列,如sms_remain?我应该补充,根据你的实际数据,你可能想要或需要左连接和/或使用isnull(值,0)嗨,谢谢你的帮助。错误:Msg 1087,级别15,状态2,第5行必须声明表变量“@TBL_User”。删除@符号。我只是创建了三个@table变量,而不是创建了一个实际的table。我更新了查询,删除了@symbols。非常感谢。最后一件事是,你能告诉我,如果平均价格(Opprice_Price)不存在,那么我想使用0.006的价格。你能告诉我怎么做吗?