2017-05-09 1 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」の後ろにあるので悪いことではありません)を行う以外に害はありません。 –