繁体   English   中英

带有子查询的 SELECT 语句

[英]SELECT statement with sub-query

指示:

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

编写一个返回三列的 SELECT 语句:

  • 供应商名称(来自供应商表)
  • LatexInv(从 InvoiceDate 返回最后一个条目的汇总函数)
  • AverageInv:(从 InvoiceTotal 返回平均值的汇总函数)

提示:在加入派生表(子查询)之前,您需要加入两个表

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

按适当的列对外部查询进行分组,并按最新到最旧的 LatexInv 对结果进行排序

我的代码

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

MAX(InvoiceDate)AVG(InvoiceTotal)下面有一条红线,因为它们来自 Invoices 表。 不是供应商。 但是,如果我在外部查询中使用FROM Invoices那么VendorName将不会被识别? 如何解决此问题并获得此问题正在寻找的结果集?

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

供应商

发票

尝试这个:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM