2017-06-30 24 views
0

我需要創建一個表值表達式,該表達式具有帶子選擇和order by子句的查詢。下面是表達。表達式中的查詢有效,但表達式給出了下面的錯誤。我嘗試在R_KEY前面放置TOP 100 PERCENT,但是這也會導致執行錯誤。爲內部查詢創建表值表達式的最佳方式是什麼?我是否需要更改查詢?在SQL Server表值表達式中使用具有子選擇查詢的排序表達式

錯誤 消息1033,級別15,狀態1,行26 ORDER BY子句在視圖,內聯函數,派生表,子查詢和公用表表達式無效,除非TOP,抵消或FOR XML是也指定。

表值表達式

WITH BilledTotals as (
select R_KEY,      -- Loan Number 
     BILL_DATE,     -- Bill Date 
     BILLED_AMT,     -- Bill Amount 
     (SELECT SUM(b.BILLED_AMT) -- Running Total for Billed Amount 
     FROM temp_Billing_History b 
     WHERE a.R_KEY = '47200100014871001 ' and a.R_KEY = b.R_KEY and b.BILL_DATE <= a.BILL_DATE) as RunningTotalBilled 
from temp_Billing_History a where a.R_KEY = '47200100014871001 ' 
order by a.BILL_DATE 
) 
+1

爲什麼在CTE中需要ORDER BY? – Serg

+0

刪除'ORDER BY'子句。 – Eric

回答

1

最好的辦法是使用窗口函數:

WITH BilledTotals as (
     select R_KEY,      -- Loan Number 
      BILL_DATE,     -- Bill Date 
      BILLED_AMT,     -- Bill Amount 
      SUM(BILL_ED_AMT OVER (PARTITION BY a.R_KEY ORDER BY BILL_DATE) as RunningTotalBilled 
     from temp_Billing_History a 
     where a.R_KEY = '47200100014871001 ' 
    ) 

通常,order by在CTE不必要的。如果您想要訂購最終結果,您需要在最外面的select中有一個order by