Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL中的子查询和派生表存在问题_Sql Server_Subquery - Fatal编程技术网

Sql server SQL中的子查询和派生表存在问题

Sql server SQL中的子查询和派生表存在问题,sql-server,subquery,Sql Server,Subquery,我对SQL仍然非常陌生,最近几天来一直在处理这3个特定的子查询 这个应该返回3列,只返回来自“CA”的供应商记录,并使用派生表 -- Query 6 SELECT VendorID, VendorName, Vendors.VendorState FROM Vendors JOIN (SELECT VendorState FROM Vendors) AS SubVendors ON Vendors.VendorID = SubVendors.VendorID WHERE Ven

我对SQL仍然非常陌生,最近几天来一直在处理这3个特定的子查询

这个应该返回3列,只返回来自“CA”的供应商记录,并使用派生表

 -- Query 6
SELECT VendorID, VendorName, Vendors.VendorState
FROM Vendors 
JOIN (SELECT VendorState 
      FROM Vendors) AS SubVendors ON Vendors.VendorID = SubVendors.VendorID
WHERE Vendors.VendorState = 'CA'
ORDER BY VendorID;
但当我运行它时,我会得到以下错误:

味精207,16级,状态1,第6行
无效的列名“VendorID”

这个查询返回4列,还使用一个派生表,子查询在'FROM'子句中编码

-- Query 7
SELECT 
    InvoicesMain.VendorID, 
    MAX(InvoiceTotal) AS MaxInvoice, 
    MIN(InvoiceTotal) AS MinInvoice, 
    AVG(InvoiceTotal) AS AvgInvoice
FROM 
    Invoices AS InvoiceMain
JOIN
    (SELECT TOP 10 
         VendorID, AVG(InvoiceTotal) AS AvgInvoice
     FROM Invoices
     GROUP BY VendorID
     ORDER BY AvgInvoice DESC) AS TopVendor ON InvoicesMain.VendorID = TopVendor.VendorID)
GROUP 
    InvoicesMain.VendorID
ORDER BY 
    MaxInvoice DESC;
但我得到了这个错误:

味精102,第15级,状态1,第9行
“')附近的语法不正确

最后,我真的不知道该怎么做;应该将其重述为子查询:

SELECT 
    InvoiceNumber, InvoiceDate, InvoiceLineItemAmount
FROM 
    Invoices 
JOIN 
    InvoiceLineItems ON Invoices.InvoiceID = Invoicelineitems.InvoiceID
WHERE 
    VendorID = 122
ORDER BY 
    InvoiceDate;

有什么提示吗?

在查询6中,您没有在子查询中选择
VendorID
,这就是发生错误的原因。请改为尝试此查询:

SELECT VendorID, VendorName, Vendors.VendorState
FROM Vendors JOIN 
(SELECT VendorState, VendorID 
FROM Vendors) AS SubVendors
ON Vendors.VendorID = SubVendors.VendorID
WHERE V.VendorState = 'CA'
ORDER BY VendorID;
对于查询7,您的子查询中缺少一个

SELECT InvoicesMain.VendorID, MAX(InvoiceTotal) AS MaxInvoice, MIN(InvoiceTotal) AS MinInvoice, AVG(InvoiceTotal) AS AvgInvoice
FROM Invoices AS InvoiceMain
JOIN
(SELECT TOP 10 VendorID, AVG(InvoiceTotal)) AS AvgInvoice
FROM Invoices
GROUP BY VendorID
ORDER BY AvgInvoice DESC) AS TopVendor
ON InvoicesMain.VendorID = TopVendor.VendorID)
GROUP InvoicesMain.VendorID
ORDER BY MaxInvoice DESC;
对于最后一项,您可以通过从表
InvoiceLineItems
中选择
InvoiceID
将其恢复为子查询,就像查询6中一样

SELECT InvoiceNumber, InvoiceDate, InvoiceLineItemAmount
FROM Invoices JOIN 
(SELECT InvoiceID FROM Invoicelineitems) As I
ON Invoices.InvoiceID = I.InvoiceID
WHERE VendorID = 122
ORDER BY InvoiceDate;

您的第一个查询不是在子供应商查询中选择供应商ID,而是尝试加入其中。您的第二个查询在您的联接之后有一个需要删除的额外括号。第三个有什么问题?作为子查询,您只需要删除ORDERBY语句,如果需要排序,则在子查询之外执行。