【问题标题】:SQL Server : query join with multiple tables and Group BySQL Server:查询连接与多个表和分组依据
【发布时间】:2019-03-17 18:40:27
【问题描述】:

我想加入如下三个 SQL Server 表,如图所示。我知道他们必须是JOINed,但我认为是GROUP BY 让我失望。我认为它需要在SELECT 中使用SELECT

select ActJobs.ID as JobID, ActJobs.JobName, ActJobs.CustomerID
From Job.ActiveJobsTbl as ActJobs

select Cus.ID as CustomerID, concat(Cus.LastName, ', ', Cus.FirstName) as Customer
From Customer.CustomerTbl as Cus

Select Est.ID_Job as JobID, Sum(Est.ItemAmount + Est.SalesTax) As Price
From Job.EstimateTbl as Est 
Group By Est.ID_Job

【问题讨论】:

  • 太棒了。您是否尝试过使用JOIN

标签: sql sql-server join select


【解决方案1】:

您可以简单地JOIN前两个表,然后将聚合查询转换为您也可以JOIN的子查询:

SELECT 
    ActJobs.ID as JobID, 
    ActJobs.JobName, 
    ActJobs.CustomerID,
    CONCAT(Cus.LastName, ', ', Cus.FirstName) as Customer,
    Est.Price
FROM 
    Job.ActiveJobsTbl AS ActJobs
    INNER JOIN Customer.CustomerTbl AS Cus ON Cus.ID = ActJobs.CustomerID
    INNER JOIN (
        SELECT ID_Job, SUM(ItemAmount + SalesTax) As Price 
        FROM Job.EstimateTbl
        GROUP BY ID_Job
    ) AS Est ON Est.ID_Job = ActJobs.ID

【讨论】:

    【解决方案2】:

    使用标量子查询并加入

    select ActJobs.ID as JobID, ActJobs.JobName, ActJobs.CustomerID,
    concat(Cus.LastName,', ',Cus.FirstName) as Customer,(select Sum(Est.ItemAmount + Est.SalesTax) from Job.EstimateTbl as Est where Est.ID_Job=ActJobs.ID) as price
    From Job.ActiveJobsTbl as ActJobs
    inner join Customer.CustomerTbl as Cus on Cus.ID as CustomerID=ActJobs.CustomerID
    

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 2017-11-21
      • 2011-03-02
      • 1970-01-01
      • 2016-10-20
      • 1970-01-01
      • 2017-07-05
      • 1970-01-01
      相关资源
      最近更新 更多