2017-05-09 2 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

WITHSELECT 앞에 있어야합니다. 이 경우, 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 이후이므로)이 그렇게 나쁜 것은 아닙니다. –

관련 문제