0

Access 2003 で書かれた以下の SQL があります。 SQL Server 2008 で prj を開発する必要があり、SQL Server 2008 でこの SQL を実行すると、Access の First() 関数が SQL Server 2008 で認識できないため、エラーが発生します。 SQL Server で2008年、TOP()関数を試してみましたが、まだsloveできません。私を助けてください。

  SELECT DISTINCTROW TableA.TCode,                  
  TableA.DCode,                 
  TableA.DepCode,                   
  TableA.ShouhinCode,                   
  First(TableB.TName) AS TNameFirstRecord,                  
  First(TableC.LDepName) AS LDepNameFirstRecord,                    
  First(TableD.ThingType) AS ThingTypeFirstRecord,                  
  First(TableA.GoodsName) AS GoodsNameFirstRecord,                  
  Sum(TableA.Amount) AS AmountData,                 
  Sum(TableA.MoneyAmount) AS MoneyAmountData,                   
  Sum(TableA.DetailedMoneyAmount) AS DetailedMoneyAmounData,                    
  Sum(TableA.SummaryMoneyAmount) AS SummaryMoneyAmountData,                 
  TableA.POSNo                  
 FROM (                 
 (TableA INNER JOIN TableC ON TableA.DCode = TableC.DCode)                  
 INNER JOIN TableB ON TableA.TCode = TableB.TCode                   
 )                  
  INNER JOIN TableD ON TableA.DepCode = TableD.DepCode                  
 GROUP BY TableA.TCode,                 
  TableA.DCode,                 
  TableA.DepCode,                   
  TableA.ShouhinCode,                   
  TableA.POSNo                  
 ORDER BY TableA.TCode,                 
  TableA.DCode,                 
  TableA.DepCode,                   
  TableA.ShouhinCode                    
4

1 に答える 1

0

ウィンドウ関数を使用する必要があると思います

テーブルを行番号のあるバージョンに置き換えます

SELECT TableA.TCode,                  
    A.DCode,                 
    A.DepCode,                   
    A.ShouhinCode,                   
    B.TName AS TNameFirstRecord,                  
    C.LDepNamee AS LDepNameFirstRecord,                    
    D.ThingType AS ThingTypeFirstRecord,                  
    A.GoodsNameAS GoodsNameFirstRecord,                  
    Sum(A.Amount) AS AmountData,                 
    Sum(A.MoneyAmount) AS MoneyAmountData,                   
    Sum(A.DetailedMoneyAmount) AS DetailedMoneyAmounData,                    
    Sum(A.SummaryMoneyAmount) AS SummaryMoneyAmountData,                 
    A.POSNo                  
FROM 
    INNER JOIN (select row_number() over (partition by object_id ORDER BY Name DESC) as RowNumber, * from TableA) A                 
    INNER JOIN (select row_number() over (partition by object_id ORDER BY Name DESC) as RowNumber, * from TableC) C ON A.DCode = C.DCode                
    INNER JOIN (select row_number() over (partition by object_id ORDER BY Name DESC) as RowNumber, * from TableB) B ON A.TCode = B.TCode                   
    INNER JOIN (select row_number() over (partition by object_id ORDER BY Name DESC) as RowNumber, * from TableD) D ON A.DepCode = D.DepCode    

WHERE 
  A.RowNumber = 1 AND B.RowNumber = 1 AND C.RowNumber = 1 AND D.RowNumber = 1

GROUP BY A.TCode,                 
    A.DCode,                 
    A.DepCode,                   
    A.ShouhinCode,                   
    A.POSNo                  
ORDER BY A.TCode,                 
    A.DCode,                 
    A.DepCode,                   
    A.ShouhinCode    
于 2012-05-27T02:45:34.713 に答える