私は、ネストされたサブクエリから列を取得する必要があるストアプロシージャを持っています。私は一度ネストされていればそれを得る方法を知っていますが、この状況では、私が表示する必要がある列は二重に入れ子になっています。左結合のネストされたサブクエリから列を取り出す方法は?
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
上記の例では、左から2列を取得する必要があります。LEFT JOIN (SELECT vendor,tblarinv.arinv, tblardetail.arddate
。もともとselectステートメントにはベンダーしかありませんが、tblarinv.arinv, tblardetail.arddate
が必要なので、左側のjoinステートメントの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
を取得する必要があります。
は、ここに私の編集したクエリです。
クエリは右全く見ていないこと。どこから来ているのですか? 'a'と' left join'の後の名前のない派生テーブルの結合はどこですか?名前のない派生テーブルの内部ではなく、その外に集約するのはなぜですか?派生テーブルのベンダーはどこですか? – SqlZim
ここから始めましょう。 http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –
@SqlZim:私のクエリは複雑なので、私は簡単な例を挙げようとしました。申し訳ありませんが、コードを正しく編集しようとしています。 – toofaced