2016-08-24 61 views
0

我正在寫入SQL的進展10.2B07數據庫,並得到以下錯誤「列'OUTERINVOICEHEADER.MEMBERID'無法找到或未指定查詢(13865 。)進度SQL列無法找到或沒有指定查詢

下面是該查詢:

select concat(substring(OuterInvoiceHeader.sold_to_cust_nbr, 1, 6) + '-', OuterInvoiceHeader.sold_to_cust_seq) as MemberID, 
sum(OuterInvoiceHeader.net_weight) as TotalInvoicePounds, 
sum(OuterInvoiceHeader.net_weight/2000) as TotalTons, 
sum(OuterInvoiceHeader.invoice_amt) as InvoiceAmount, 
sum(InvoiceSurcharges.Surcharge) as Surcharges, 
sum(OuterInvoiceHeader.invoice_amt - InvoiceSurcharges.Surcharge) as Total, 
sum(Returns.qty_received) as PoundsReturned 
from AXS.PUB.ivc_header OuterInvoiceHeader 

inner join 
(select m.invoice_nbr, sum(m.extension) Surcharge from AXS.PUB.ivc_mchgs m 
inner join 
AXS.PUB.ivc_header h 
on h.invoice_nbr = m.invoice_nbr 
group by m.invoice_nbr) InvoiceSurcharges 
on OuterInvoiceHeader.invoice_nbr = InvoiceSurcharges.invoice_nbr 

left outer join 
(select concat(substring(ReturnHeader.ship_to_nbr, 1, 6)+'-',InnerInvoiceHeader.sold_to_cust_seq) as ReturnMemberID, 
ReturnHeader.invoice_nbr as ReturnInvoiceNum, 
qty_received 
from AXS.PUB.return_hdr ReturnHeader 
inner join 
AXS.PUB.ivc_header InnerInvoiceHeader 
on ReturnHeader.invoice_nbr = InnerInvoiceHeader.invoice_nbr 
inner join AXS.PUB.return_line ReturnLine 
on ReturnHeader.claim_nbr = ReturnLine.claim_nbr 
where ReturnInvoiceNum = '0001010914' 
group by ReturnMemberID, ReturnInvoiceNum, qty_received) Returns 
on OuterInvoiceHeader.MemberID = Returns.ReturnMemberID 
--on OuterInvoiceHeader.invoice_nbr = Returns.ReturnInvoiceNum 

where OuterInvoiceHeader.sold_to_cust_nbr = '000837' and  OuterInvoiceHeader.invoice_date between '06/01/2016' and '06/30/2016' and OuterInvoiceHeader.invoice_status = '5804' and OuterInvoiceHeader.invoice_type='5601' 
group by MemberID 

的問題是在左連接;「關於OuterInvoiceHeader.invoice_nbr = Returns.ReturnInvoiceNum」註釋掉的條款,如果將取消註釋的工作「上OuterInvoiceHeader .MemberID = Returns.ReturnMemberID「子句給我錯誤。

我不明白的是,它們都引用頂部SELECT語句中的一列,唯一的區別是一個是串聯而另一個不是。

我希望我不能在這裏看到樹木的森林,答案很簡單,所以如果任何人有任何建議或問題,我都聽過。

+0

您可能想要檢查AXS.PUB.ivc_header以查看您是否確實具有MemberID列。 –

+0

我確實有memberid,但這不是公司的完整id,我必須連接sold_to_cust_seq;每個序列標識子公司。 – CuriousOne

+0

看看我的答案,應該解釋原因。 –

回答

1

試試這個:

我更換,以別名MemberID引用是實際串連列CONCAT(SUBSTRING(OuterInvoiceHeader.sold_to_cust_nbr, 1, 6)+'-', OuterInvoiceHeader.sold_to_cust_seq)

SELECT      CONCAT(SUBSTRING(OuterInvoiceHeader.sold_to_cust_nbr, 1, 6)+'-', OuterInvoiceHeader.sold_to_cust_seq) AS MemberID 
        , SUM(OuterInvoiceHeader.net_weight) AS TotalInvoicePounds 
        , SUM(OuterInvoiceHeader.net_weight/2000) AS TotalTons 
        , SUM(OuterInvoiceHeader.invoice_amt) AS InvoiceAmount 
        , SUM(InvoiceSurcharges.Surcharge) AS Surcharges 
        , SUM(OuterInvoiceHeader.invoice_amt - InvoiceSurcharges.Surcharge) AS Total 
        , SUM(Returns.qty_received) AS PoundsReturned 
FROM      AXS.PUB.ivc_header OuterInvoiceHeader 
         INNER JOIN 
           (SELECT m.invoice_nbr 
            , SUM(m.extension) Surcharge 
           FROM AXS.PUB.ivc_mchgs m 
            INNER JOIN AXS.PUB.ivc_header h ON h.invoice_nbr = m.invoice_nbr 
           GROUP BY m.invoice_nbr) InvoiceSurcharges ON OuterInvoiceHeader.invoice_nbr = InvoiceSurcharges.invoice_nbr 
         LEFT OUTER JOIN 
            (SELECT CONCAT(SUBSTRING(ReturnHeader.ship_to_nbr, 1, 6)+'-', InnerInvoiceHeader.sold_to_cust_seq) AS ReturnMemberID 
             , ReturnHeader.invoice_nbr AS ReturnInvoiceNum 
             , qty_received 
            FROM AXS.PUB.return_hdr ReturnHeader 
             INNER JOIN AXS.PUB.ivc_header InnerInvoiceHeader ON ReturnHeader.invoice_nbr = InnerInvoiceHeader.invoice_nbr 
             INNER JOIN AXS.PUB.return_line ReturnLine ON ReturnHeader.claim_nbr = ReturnLine.claim_nbr 
            WHERE ReturnInvoiceNum = '0001010914' 
            GROUP BY ReturnMemberID 
             , ReturnInvoiceNum 
             , qty_received) Returns ON CONCAT(SUBSTRING(OuterInvoiceHeader.sold_to_cust_nbr, 1, 6)+'-', OuterInvoiceHeader.sold_to_cust_seq) = Returns.ReturnMemberID 
--on OuterInvoiceHeader.invoice_nbr = Returns.ReturnInvoiceNum 

WHERE OuterInvoiceHeader.sold_to_cust_nbr = '000837' 
    AND OuterInvoiceHeader.invoice_date BETWEEN '06/01/2016' AND '06/30/2016' 
    AND OuterInvoiceHeader.invoice_status = '5804' 
    AND OuterInvoiceHeader.invoice_type = '5601' 
GROUP BY CONCAT(SUBSTRING(OuterInvoiceHeader.sold_to_cust_nbr, 1, 6)+'-', OuterInvoiceHeader.sold_to_cust_seq); 

基本上你需要記住執行的SQL語句的順序:

  1. FROM子句
  2. WHERE子句
  3. GROUP BY子句
  4. HAVING子句
  5. SELECT子句
  6. ORDER BY子句
1

這是一個計算列別名,從而該錯誤。您應該考慮使用整個表達式而不是像

on concat(substring(OuterInvoiceHeader.sold_to_cust_nbr, 1, 6) + '-', OuterInvoiceHeader.sold_to_cust_seq) = Returns.ReturnMemberID 

而不是on OuterInvoiceHeader.MemberID = Returns.ReturnMemberID。同樣,更改您使用相同別名的其他地方。您可以並且應該僅在外部查詢中使用該別名,而不是在同一查詢中使用該別名。

+0

兩個答案都是正確的,這個答案是第一位的,這就是爲什麼我把它標記爲正確的答案。感謝拉胡爾和卡姆蘭作出了迅速的迴應,他們真的幫了我們很大的忙。 – CuriousOne

+0

嗨科林其實我回答了第一,但那好:P –

+0

對不起,卡姆蘭,我是相對較新的SO,並仍然搞清楚它是如何工作的。現在,我回頭看看你的回答是首先發布的,我不知道我是如何錯過的。 – CuriousOne