簡體   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