Pomóż, mam problematyczne zapytanie, aby wyświetlić kolumnę Orderno2 . Poniżej znajduje się zapytanie:

SELECT 
    V.id, V.TypeApv, V.CreateDate, 
    P.Requestor, VE.VendorName, V.InvoiceNo, V.Hawb, 
    PA.PaymentFor, V.Amount, V.Curr, V.DueDate, V.Remarks, V.OrderNo,
    (SELECT 
         STUFF((SELECT DISTINCT ', ' + CASE WHEN [e-SAM Case]='Subsequent' OR [e-SAM Case]='DDT' AND [Local SAP PO] LIKE '5%' OR [e-SAM Case]='FBS 4'
        THEN PoNo ELSE [Local SAP PO] END
                FROM v_copo VC
                WHERE VC.AWB1 = V.Hawb
                FOR XML PATH('')), 1, 1, '')) AS OrderNo2, 
    (SELECT ISNULL(OrderNo2, V.OrderNo)) AS OrderNoFinal
FROM
    APV_AF V
LEFT JOIN 
    APV_Person P ON P.id = V.Requestor
LEFT JOIN 
    APV_Vendor VE ON VE.IDVendor = V.VendorName
LEFT JOIN 
    APV_Payment PA ON PA.IDPayment = V.PaymentFor
ORDER BY 
    V.CreateDate DESC
1
deofurqon 4 wrzesień 2020, 10:09

1 odpowiedź

Najlepsza odpowiedź

Nie można odwoływać alias w tym samym zakresie, w którym został zdefiniowany (oprócz klauzuli order by). Typowe prace obejmują podzewności lub CTE.

W SQL Server, prosta opcja jest połączeniem bocznym:

SELECT 
    V.id, V.TypeApv, V.CreateDate, 
    P.Requestor, VE.VendorName, V.InvoiceNo, V.Hawb, 
    PA.PaymentFor, V.Amount, V.Curr, V.DueDate, V.Remarks, V.OrderNo,
    X.OrderNo2, 
    ISNULL(X.OrderNo2, V.OrderNo) AS OrderNoFinal
FROM APV_AF V
LEFT JOIN APV_Person P ON P.id = V.Requestor
LEFT JOIN APV_Vendor VE ON VE.IDVendor = V.VendorName
LEFT JOIN APV_Payment PA ON PA.IDPayment = V.PaymentFor
OUTER APPLY (
    SELECT 
        STUFF((SELECT DISTINCT ', ' + CASE WHEN [e-SAM Case]='Subsequent' OR [e-SAM Case]='DDT' AND [Local SAP PO] LIKE '5%' OR [e-SAM Case]='FBS 4'
        THEN PoNo ELSE [Local SAP PO] END
                FROM v_copo VC
                WHERE VC.AWB1 = V.Hawb
        FOR XML PATH('')), 1, 1, '') AS OrderNo2
) X
ORDER BY V.CreateDate DESC
1
GMB 4 wrzesień 2020, 08:00