2013-09-05 4 views
0

foxpro 2.6 (다른 선택 없음)에서 쿼리를 수행하는 데 어려움을 겪고 있습니다.Foxpro 복잡한 하위 쿼리

참고 union 쿼리가 작동하지 않습니다.

stockw (item, qte, dat) item is key 
shist (item, qte, date) each row is a purchase for item and qte and date 

아래의 쿼리는 우리가 올해 초부터 모든 아이템을 판매하고 얼마나 많은 달 알고 shist의 항목에 대한 첫 구매를 계산합니다

select shist.item as s_item, MIN(shist.date),stockw.qte as qte_remain,; 
IIF(YEAR(MIN(shist.date)) < 2013, MONTH(DATE()), MONTH(DATE())-MONTH(shist.date)+1) as months; 
FROM shist,stockw; 
WHERE (shist.item LIKE 'LF-TK%' OR shist.item LIKE 'PL%' OR shist.item LIKE 'LF-A%') AND stockw.item = shist.item; 
GROUP BY shist.item; 
into CURSOR x 

는 내가 원하는 : - 각 항목 SUM (shist.qte)/months (각 항목에 대해 위 쿼리에서 월을 계산 한 것입니다) 2013 년까지의 평균 qte를 계산합니다.

어쩌면 아래의 쿼리를 원합니다. : - 선택 2013 년 초부터 지금까지의 각 항목 (가장 높은 달 확보)에 대한 매월 shist.qte의 합계입니다.

+0

UNION은 Visual FoxPro 3.0까지 지원되지 않았기 때문에 작동하지 않습니다. –

+0

그렇지 않습니다. FoxPro 2.x에 UNION을 두 번 확인했습니다. –

답변

1

내가 노동 조합을 적용 할 위치를 잘 따르지 않아서 쿼리를 여러 번 실행 한 것처럼 보입니다. VFP의 구시대에서 사용할 수 있었던 아주 오래된 트릭이 있습니다 ...

커서로 선택을 수행 할 때 커서는 일반적으로 읽기 전용이며 추가 할 읽기 쓰기가 아닙니다. 그러나 처음으로 다른 결과를 실행 한 결과를 사용하면 다른 별칭으로 CAN 그것에 추가하십시오. 의 라인을 따라 뭔가 ...에 대한

use in select("C_ThisIsMaster") 

for i = 1 to 10 
    use in select("C_ThisRun") 
    select blah, blah2, blah3 ; 
     from YourTables; 
     where SomeKey = SomeIDForCyclei; 
     into cursor C_ThisRun 

    if not used("C_ThisIsMaster") 
     select 0 
     use (dbf("C_ThisRun")) again alias C_ThisIsMaster 
    else 
     select C_ThisIsMaster 
     append from dbf("C_ThisRun") 
    endif 
endfor 

에서 [I] 루프 그냥 샘플입니다,하지만 당신은 당신이 노동 조합을 할 것 많은 사이클을 위해 실행하는 경우, 당신은 단지 쿼리에 그 당겨 수 있습니다 그리고 ...

여기에 사용 된 예) 나는 VFP 스캔/ENDSCAN이 알고 있지만, (EOF하지 동안 그래서 할 일을 사용하여 유래가 얼마나 멀리 다시 기억하지
select * 
    from SomeTable 
    where SomeCondition 
    into cursor C_DoTheseItems 

use in select("C_ThisIsMaster") 

select C_DoTheseItems 
do while not eof() 
    Do the same thing as inside the FOR loop above 

    select C_DoTheseItems 
    skip 
enddo 

를 통해로서, 같은 시뮬레이션

두 옵션 중 하나를 선택하면 처리하려는 각 항목의 시뮬레이션 된 UNION이 하나의 " 별칭 "결과"C_ThisIsMaster "와 함께 작동

+0

내가 여러 쿼리를 만들었지 만 이후 새 쿼리를 실행하기 위해 테이블로 출력을 사용하는 방법을 모르기 때문에이 테이블에 새 쿼리를 실행하고 임시 테이블을 만든 다음 제거합니다. – fawzib

+0

SCAN/ENDSCAN go 다시 FoxPro 2.0. –

+0

@ TamarE.Granor, 나는 그렇게 생각했다. 그러나 그렇지 않으면 도움이 될 것 인 것에 관해 그들을 없애 버리고 싶지 않았다. – DRapp