带有子查询的SELECT语句

时间:2020-03-10 05:06:15

标签: sql-server

说明:

业务案例:会计部门希望报告前十名供应商的最新发票日期和平均发票金额。

写一个SELECT语句返回三列:

  • VendorName(来自“供应商”表)
  • LatestInv(从InvoiceDate返回最后一个条目的摘要函数)
  • AverageInv :(从InvoiceTotal返回平均值的汇总函数)

提示:您需要先连接两个表,然后再连接到派生表(子查询)

子查询部分:SELECT语句,返回前十个VendorID和AverageInv(名称和功能与外部查询中所述的相同)。将结果按适当的列分组,然后按AverageInv从大到小对结果进行排序。将子查询关联为BestVendors并将其连接到正确的表(两个表均共享一个关键字段)。

按适当的列对外部查询进行分组,然后按LatestInv对结果进行排序 最新到最老

我的代码

MAX(InvoiceDate)

AVG(InvoiceTotal)下还有一条红线,以及FROM Invoices下有一条红线,因为它们来自“发票”表。不是供应商。但是,如果我在外部查询中使用VendorName,那么{{1}}是否会被识别?如何解决此问题并获得该问题正在寻找的结果集?

这些图片还显示了发票和供应商表中的一些示例数据

Vendors

Invoices

1 个答案:

答案 0 :(得分:1)

尝试一下:

SELECT VendorName, BestVendors.LatestInv, BestVendors.AverageInv
FROM Vendors v 
INNER JOIN 
(
    SELECT TOP 10 VendorID
              ,AVG(InvoiceTotal) AS AverageInv
              ,MAX(InvoiceDate) AS LatestInv
    FROM Invoices
    GROUP BY VendorID
    ORDER BY AverageInv DESC
) AS BestVendors
    ON v.VendorID = BestVendors.VendorID
ORDER BY LatestInv DESC
相关问题