2017-05-09 90 views
1

我的代碼不正確的語法附近「)」 ......我不明白這一點

RETURNS TABLE 
AS 
RETURN 
(
with Documents as 
(
select TOP 100 PERCENT d.LeEn, d.Wacode, d.Waname, d.Arcode, d.Arname, sum(d.Quantity) as Quantity from Documents as d 
where (select max(DocumentDate) from Documents as d where d.DocumentCode = 'INW') <= d.DocumentDate 
group by d.LeEn, d.WarehouseCode, d.Waname, d.Arcode, d.Arname 
order by d.LeEn, d.WarehouseCode, d.Arcode 
) 
) 

和我得到這個

附近有語法錯誤)「。

有什麼想法?

+2

用你正在使用的數據庫標記你的問題。 –

回答

3

WITH應該在SELECT之前。在這種情況下,CTE似乎沒有必要,所以才這樣做:

RETURN (
select TOP 100 PERCENT d.LeEn, d.Wacode, d.Waname, d.Arcode, d.Arname, sum(d.Quantity) as Quantity 
from Documents as d 
where (select max(DocumentDate) 
     from Documents d 
     where d.DocumentCode = 'INW' 
     ) <= d.DocumentDate 
group by d.LeEn, d.WarehouseCode, d.Waname, d.Arcode, d.Arname 
order by d.LeEn, d.WarehouseCode, d.Arcode 
) 

ORDER BYTOP 100是完全多餘的。 SQL Server不保證結果是有序的。

+0

我是否錯過了解釋「TOP 100 PERCENT」存在的微妙之處?這不是沒有意義嗎? –

+0

@Crowder同樣的問題,如果我刪除它... –

+1

@ T.J.Crowder。 。 。我把它放在裏面.OP可能會認爲結果將通過使用「TOP」來排序。這是不能保證的,但除了做一個不必要的排序(這是在'GROUP BY'之後,所以並沒有那麼糟糕),它沒有任何害處。 –