sql server内部联接和分组依据

yk9xbfzb  于 2021-07-24  发布在  Java
关注(0)|答案(4)|浏览(325)

在sql server中,我尝试按每个销售人员对一些信息进行分组,如下所示:
我有两张table:职位和客户
在positions表中,我有以下列:client\u id、balance、acquisition\u cost,在clients表中我使用以下列:client\u id和sales\u person。
我想按销售人员(客户表)分组客户id、余额、购置成本(职位表)
我试过这个:

SELECT Positions.Client_ID, Positions.Balance, Positions.Acquisition_cost
FROM Positions
INNER JOIN Clients ON Positions.Client_ID = Clients.Client_ID
GROUP BY Sales_person

它告诉我“positions.client\u id在select列表中无效,因为它既不包含在聚合函数中,也不包含在groupby子句中”。
我很清楚,我对sql是个新手,所以这对我来说没什么意义。

aiazj4mn

aiazj4mn1#

您需要在group by子句中添加positions.client\ id,因为select需要此列,如果您确实不想在select中添加positions.client\ id,则无需在group by子句中添加

eqzww0vc

eqzww0vc2#

在你的专栏里 SELECT 你不包括在 GROUP BY ,您需要使用某种聚合函数( MAX , SUM ,等等)。所以你可以这样写:

SELECT Positions.Client_ID
     , Clients.Sales_person
     , SUM(Positions.Balance) Balance_Sum,
     , SUM(Positions.Acquisition_cost) Acquisition_Cost_Sum
  FROM Positions
INNER JOIN Clients ON Positions.Client_ID = Clients.Client_ID
GROUP BY Positions.Client_ID
       , Clients.Sales_person

如果您只需要按销售人员而不是按客户id列出的合计,您可以从列表中删除客户id SELECT 以及 GROUP BY :

SELECT Clients.Sales_person
     , SUM(Positions.Balance) Balance_Sum,
     , SUM(Positions.Acquisition_cost) Acquisition_Cost_Sum
  FROM Positions
INNER JOIN Clients ON Positions.Client_ID = Clients.Client_ID
GROUP BY Clients.Sales_person
uxh89sit

uxh89sit3#

SELECT a.Client_ID, b.Sales_person, SUM(a.Balance) as Balance_Sum,SUM(a.Acquisition_cost) as Acquisition_Cost_Sum FROM Positions as a INNER JOIN Clients as b ON a.Client_ID = b.Client_ID GROUP BY a.Client_ID, b.Sales_person
zlwx9yxi

zlwx9yxi4#

谢谢你们,这里的代码在这种情况下对我有效:

SELECT Positions.Client_Id, Clients.Sales_person, SUM(Positions.Balance) as sum_balance_impacted, SUM(Positions.Acquisition_cost) as sum_acquisition_cost 
FROM Positions 
INNER JOIN Clients ON Positions.Client_Id= Clients.Client_Id
GROUP BY Clients.Sales_person, Positions.Client_Id```

相关问题