我有一个存储过程,我必须从嵌套的子查询中检索一列。我知道如何获得它,如果它只嵌套一次,但对于我的这种情况,我需要显示的列是双重嵌套。如何从左连接中的嵌套子查询中检索列?
SELECT a.vendor,
a.last,
MaxInv
FROM
(
SELECT vendor, day
FROM tblvendor) a
LEFT JOIN (SELECT vendor, tblarinv.arinv, tblardetail.arddate
Sum([MaxQty]*[ActualCost]) AS MaxInv,
FROM tblarinv
INNER JOIN tblardetail
ON tblarinv.id= tblardetail.id)
group by a.vendor,a.last
在上面的例子中,我必须从左连接LEFT JOIN (SELECT vendor,tblarinv.arinv, tblardetail.arddate
检索两列。最初,select语句中只有供应商,但因为我需要tblarinv.arinv, tblardetail.arddate
,所以我在左连接中的select语句中添加了它们。然后,当我尝试在第一个SELECT语句中添加此字段时,它不会识别错误提示'多部分标识符无法绑定'。 任何人都可以帮助我吗?
这里是我的编辑查询:
SELECT
a.Vendor,
,CASE WHEN sum(GP)<>0 THEN GP ELSE 0 END GP
,a.ThreeMonths
,CASE WHEN sum(GP)<>0 THEN GP/@WorkDaysElapsed ELSE 0 END AS AvgDailyGP
,CurrentInv
,MaxInv
,Inventory_Variance
FROM
(Select Vendor, sum(GrossProfit) ThreeMonths,
(Select sum(GrossProfit) From dbo.MonthlySales with (nolock) Where EndOfMonth Between dateadd(m,-3,@First) and @First-1) as AllThreeMonths
FROM MonthlySales with (nolock)
Where EndOfMonth>=dateadd(m,-3,@First)
Group By Vendor
Having sum(GrossProfit)<>0) a
LEFT JOIN (Select tblMaterial.Vendor, tblARDetail.ARInvoiceID, tblARDetail.ARInvoiceDetailID, tblARInv.ARInvoiceDate
,(Sum(SplitAmount))-(Sum((CASE WHEN SplitAmount<0 THEN -1*ABS([Quantity]) ELSE ABS([Quantity]) END)*dbo.fn_CalculatePrice_Decimal(tblARDetail.UnitCost,tblARDetail.ProductDiscountPct))) AS GP
FROM tblARInv with (nolock)
INNER JOIN tblARDetail with (nolock) ON tblARDetail.ARInvoiceID = tblARInv.ARInvoiceID
INNER JOIN tblMaterial with (nolock) ON tblMaterial.MaterialID = tblARDetail.MaterialID
INNER JOIN [dbo].[tblCust]
ON [tblCust].[CustomerID] = [tblARInv].[CustomerID]
Where tblARInv.Date>= '' + cast(Month(GetDate()) as varchar(2)) + '/1/' + cast(year(GetDate()) as varchar(4)) + ''
AND [tblCust].[Status] != 8 --Internal
Group By tblMaterial.Vendor, tblARDetail.ARInvoiceID, tblARDetail.ARInvoiceDetailID, tblARInv.ARInvoiceDate)
ThisMonth ON ThisMonth.Vendor=a.Vendor
Group By
a.Vendor
,GP
,a.ThreeMonths
,AllThreeMonths
,CurrentInv
,MaxInv
,Inventory_Variance
END
所以,我需要找回tblARDetail.ARInvoiceID, tblARDetail.ARInvoiceDetailID, tblARInv.ARInvoiceDate
我加在上面编辑查询。
该查询看起来不正确的。 'last'从哪里来?你在'a'的连接和在'left join'后的未命名派生表在哪里?你为什么要在未命名的派生表之外进行聚合而不是在其内部进行聚合?你的派生表中有'vendor'来自哪里? – SqlZim
这里是一个开始的好地方。 http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –
@SqlZim:我的查询是复杂,所以我想给简单的例子。对不起,我会尝试正确编辑我的代码。 – toofaced