SQL Server中的别名

Jon*_*nas 1 sql-server

我在Oracle中编写了这个查询,并希望在SQL Server上编译它:

SELECT DISTINCT 
    HOLDER_CODE, CALCULATED_AMOUNT
FROM 
    (SELECT 
         DA.HOLDER_CODE, 
         ROUND(FAB.AMOUNT * FCE.EXCHANGE_RATE,0) AS CALCULATED_AMOUNT, 
         FAB.BALANCE_DATE_ID as FAB_DATE,
         MAX(FAB.BALANCE_DATE_ID) OVER (PARTITION BY DA.HOLDER_CODE) as MAX_DATE_BALANCE
     FROM 
         DIM_ACCOUNT DA 
     JOIN 
         FACT_AS_BALANCE FAB ON FAB.ACCOUNT_ID  = DA.ID
     JOIN 
         DIM_AS_CHARACTERISTICS DAC ON DAC.ID = FAB.BALANCE_TYPE_ID
     LEFT JOIN 
         FACT_CURRENCY_EXCHANGE FCE ON FCE.FROM_CURRENCY_ID = FAB.CURRENCY_ID
     WHERE 
         DAC.BALANCE_CLOSING_FLAG = 'Y' 
         AND TO_CURRENCY_ID = (SELECT DC.ID  
                               FROM DIM_CURRENCY DC
                               WHERE DC.IS_DEFAULT_CURRENCY = 'Y')
         AND FAB.AMOUNT > 0)
WHERE 
    FAB_DATE = MAX_DATE_BALANCE
ORDER BY 
    CALCULATED_AMOUNT DESC;
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,我得到以下异常:

错误:关键字"WHERE"附近的语法不正确.SQLState:S0001 ErrorCode:156

所以我想,这是最后一个where子句,它表明了这一点.有什么不对,应该是什么?

Jam*_*iec 11

您只需要对子查询进行别名

SELECT DISTINCT HOLDER_CODE, CALCULATED_AMOUNT
FROM (
  SELECT DA.HOLDER_CODE, 
         //// snip subquery
    AND FAB.AMOUNT > 0
 ) alias_name_here //<--- here
WHERE FAB_DATE = MAX_DATE_BALANCE
ORDER BY CALCULATED_AMOUNT DESC;
Run Code Online (Sandbox Code Playgroud)

您可以使用as alias_name_here或只是alias_name_here- SQL Server允许任一语法.