2013-02-28 2 views
0

Access에서 SQL Server 2008로 보고서 쿼리를 변환하려고합니다. 동일한 데이터베이스를 사용하지만 동일한 결과를 얻을 수 없습니다. 근처에도 안. 액세스 쿼리는 다음과 같다 :Access 쿼리에서 SQL Server로 변환

SELECT Sum(INPUT_ItemSaleLines.TaxExclusiveTotal) AS TotalexTax,([TotalexTax])- Sum( Nz([SumOfTaxExclusiveAmount])+ Nz([CostOfGoodsSoldAmount])+ Nz 
    ( 
      Nz 
      ( IIf 
       ( Left([Input_Items.ItemNumber],5)='31-63',136*[Quantity]/1000, 
        IIf(Left([Input_Items.ItemNumber],6)='34S-63',200*[Quantity]/1000) 
       ) 
      )+ Nz 
      ( IIf 
       ( Left([Input_Items.ItemNumber],5)='34-63',250*[Quantity]/1000, 
        IIf(Left([Input_Items.ItemNumber],6)='26-63',250*[Quantity]/1000) 
       ) 
      ) 
     ) 
    ) AS Margin,  
    INPUT_Cards_1.Name AS SalesPerson, INPUT_Sales.SalesPersonID, 
    INPUT_Sales.InvoiceStatusID, INPUT_Cards.Name, INPUT_Items.ItemName, 
    Sum(INPUT_ItemSaleLines.Quantity) AS TotalQty, 
    Sum(INPUT_ItemSaleLines.CostOfGoodsSoldAmount) AS TotalCOGS, 
    Count(INPUT_Sales.SaleID) AS [Number of Sales], 
    Sum(qryShippingTotalexGST.SumOfTaxExclusiveAmount) AS ShippingTotal 

FROM 
    ( qryShippingTotalexGST RIGHT JOIN 
     (
      (
       ( 
        INPUT_Items INNER JOIN INPUT_ItemSaleLines 
        ON INPUT_Items.ItemID = INPUT_ItemSaleLines.ItemID 
       ) INNER JOIN INPUT_Sales ON INPUT_ItemSaleLines.SaleID = INPUT_Sales.SaleID 
      ) INNER JOIN INPUT_Cards ON INPUT_Sales.CardRecordID = INPUT_Cards.CardRecordID 
     ) ON qryShippingTotalexGST.JobID = INPUT_ItemSaleLines.JobID 
    ) LEFT JOIN INPUT_Cards AS INPUT_Cards_1 ON INPUT_Sales.SalesPersonID = INPUT_Cards_1.CardRecordID 
WHERE 
    (((INPUT_Sales.Date) Between [Forms]![MenuReports]![StartDate] And [Forms]![MenuReports]![EndDate])) 
GROUP BY INPUT_Items.ItemNumber,  
    INPUT_Cards_1.Name, INPUT_Sales.SalesPersonID, INPUT_Sales.InvoiceStatusID, 
    INPUT_Cards.Name, INPUT_Items.ItemName 
HAVING 
    (((INPUT_Sales.InvoiceStatusID)<>"OR")); 

그리고 내가 같이 작성하는 SQL 서버 스크립트

SELECT MYOBItems.ItemName, MYOBCards.Name AS SalesPerson, MYOBCards1.Name, 
    SUM(MYOBsalesLines.Qty) AS TotalQty, 
    SUM(MYOBsalesLines.CostOfGoodsSoldAmount) AS TotalCOGS, 
    COUNT(MYOBSales.SaleID) AS NumberOfSales, 
    SUM(MYOBsalesLines.TaxExclusiveAmount) AS TotalexTax, 
    SUM(cast(MYOBJobsShippingTotals.TaxExclusiveAmount AS Decimal(18,2))) AS ShippingTotal, 
    (SUM(MYOBsalesLines.TaxExclusiveAmount)) - SUM 
    (
     COALESCE(cast(MYOBJobsShippingTotals.TaxExclusiveAmount AS Decimal(18,2)),0)+ COALESCE(MYOBsalesLines.CostOfGoodsSoldAmount,0)+ COALESCE 
     (
      COALESCE 
      ( 
       CASE 
        WHEN LEFT(MYOBItems.ItemNumber,5) = '31-63' THEN (136*MYOBsalesLines.Qty/1000) 
        WHEN LEFT(MYOBItems.ItemNumber,6) = '34S-63' THEN (200*MYOBsalesLines.Qty/1000) 
        ELSE 0 
       END, 0       
      )+ COALESCE 
      ( 
       CASE 
        WHEN LEFT(MYOBItems.ItemNumber,5) = '34-63' THEN (250*MYOBsalesLines.Qty/1000) 
        WHEN LEFT(MYOBItems.ItemNumber,6) = '26-63' THEN (250*MYOBsalesLines.Qty/1000) 
        ELSE 0 
       END , 0  
      ), 0 
     ) 
    )AS Margin  
    , MYOBSales.InvoiceStatusID FROM 
    ( MYOBJobsShippingTotals RIGHT JOIN 
     (
      (
       ( 
        MYOBItems INNER JOIN MYOBsalesLines 
        ON MYOBItems.ItemID = MYOBsalesLines.ItemID      
       ) INNER JOIN MYOBSales ON MYOBsalesLines.SaleID = MYOBSales.SaleID 
        AND MYOBSales.ElevateCompanyID = MYOBsalesLines.ElevateCompanyID 
      ) INNER JOIN MYOBCards AS MYOBCards1 ON MYOBSales.CardRecordID = MYOBCards1.CardRecordID 
       AND MYOBsalesLines.ElevateCompanyID = MYOBCards1.ElevateCompanyID 
      AND MYOBSales.ElevateCompanyID = MYOBCards1.ElevateCompanyID 
     ) ON MYOBJobsShippingTotals.JobID = MYOBsalesLines.JobID 
    ) LEFT JOIN MYOBCards ON MYOBSales.SalesPersonID = MYOBCards.CardRecordID 
GROUP BY MYOBItems.ItemName, MYOBCards.Name, 
    MYOBCards1.Name, MYOBSales.InvoiceStatusID 

나는 조인 된 테이블 잘못하지만 그것을 해결하는 방법을 잘 무언가가 있었다 생각한다. 내 SQL Server 스크립트에서 Access 구문과 관련이없는 실수가 있습니까? 미리 도움을 주셔서 감사합니다. 내 긴 스크립트를 유감스럽게 생각한다.

답변

0

SQL 서버 쿼리에 MS Access 쿼리의 WHERE 및 HAVING 절이 누락되었습니다. GROUP BY 절에 MS Access 쿼리와 동일한 번호 또는 열 순서가 없으며 추가 JOIN 기준이 없습니다. MS 액세스 쿼리에서.

더 충실 변환은 다음과 같이 보일 것이다!!!!

SELECT SUM(MYOBsalesLines.TaxExclusiveAmount) AS TotalexTax 
    , SUM(MYOBsalesLines.TaxExclusiveAmount) 
     - SUM 
     (
      COALESCE(cast(MYOBJobsShippingTotals.TaxExclusiveAmount AS Decimal(18,2)), 0) 
      + COALESCE(MYOBsalesLines.CostOfGoodsSoldAmount,0) 
      + COALESCE 
      (
       COALESCE 
       ( 
       CASE 
        WHEN LEFT(MYOBItems.ItemNumber,5) = '31-63' THEN (136*MYOBsalesLines.Qty/1000) 
        WHEN LEFT(MYOBItems.ItemNumber,6) = '34S-63' THEN (200*MYOBsalesLines.Qty/1000) 
        ELSE 0 
       END 
       , 0       
       ) 
       + COALESCE 
       ( 
        CASE 
        WHEN LEFT(MYOBItems.ItemNumber,5) = '34-63' THEN (250*MYOBsalesLines.Qty/1000) 
        WHEN LEFT(MYOBItems.ItemNumber,6) = '26-63' THEN (250*MYOBsalesLines.Qty/1000) 
        ELSE 0 
        END 
        , 0  
       ) 
       , 0 
      ) 
     ) 
     AS Margin 
    , MYOBCards1.Name AS SalesPerson 
    , MYOBSales.SalesPersonID 
    , MYOBSales.InvoiceStatusID 
    , MYOBCards.Name 
    , MYOBItems.ItemName 
    , SUM(MYOBsalesLines.Qty) AS TotalQty 
    , SUM(MYOBsalesLines.CostOfGoodsSoldAmount) AS TotalCOGS 
    , COUNT(MYOBSales.SaleID) AS NumberOfSales 
    , SUM(cast(MYOBJobsShippingTotals.TaxExclusiveAmount AS Decimal(18,2))) AS ShippingTotal 
FROM 
(
    MYOBJobsShippingTotals RIGHT JOIN 
    (
     (
      ( 
       MYOBItems INNER JOIN MYOBsalesLines 
       ON MYOBItems.ItemID = MYOBsalesLines.ItemID      
      ) INNER JOIN MYOBSales ON MYOBsalesLines.SaleID = MYOBSales.SaleID 
     ) INNER JOIN MYOBCards ON MYOBSales.CardRecordID = MYOBCards.CardRecordID 
    ) ON MYOBJobsShippingTotals.JobID = MYOBsalesLines.JobID 
) LEFT JOIN MYOBCards AS MYOBCards1 ON MYOBSales.SalesPersonID = MYOBCards1.CardRecordID 
WHERE MYOBSales.Date BETWEEN ? AND ? 
GROUP BY MYOBItems.ItemNumber 
     , MYOBCards1.Name 
     , MYOBSales.SalesPersonID 
     , MYOBSales.InvoiceStatusID 
     , MYOBCards.Name 
     , MYOBItems.ItemName 
HAVING MYOBSales.InvoiceStatusID <> 'OR' 

을 두 개의 물음표가 [양식]가있는 경우 [MenuReports] [STARTDATE] 및 [양식] [MenuReports] [종료 날짜] 값.

+0

답변 해 주셔서 감사 드리며 정말 도움이되었습니다. –

관련 문제