2016-06-07 7 views
0

작업과 상태가 간단한 일대 다 테이블이 있습니다. 작업은 처리 중에 상태에서 앞뒤로 순환 할 수 있으므로 작업은 특정 상태의 인스턴스를 두 개 이상 가질 수 있습니다. 그러나 처음부터 끝까지 특정 상태의 첫 번째 인스턴스 만 조회하면 해당 작업에 대한 보고서가 필요합니다.SQL은 조인 테이블에서 처음으로 일치하는 항목 만 반환합니다.

내 처음 생성 된 문은 필요한 데이터를 반환하지만 조인의 일치하는 모든 인스턴스에 대해 - 그러나 첫 번째 일치 만 필요합니다. 예 : 작업 #, 날짜, 송장 날짜, 고객, OutForApproval 날짜, 승인 날짜, 만기 날짜, 발송 날짜.

결과 데이터는 표 A (작업)의 여러 행을 반환하지만 각 조인 결과는 OFA, 승인 됨, 발송 됨 및 송장 중 첫 번째 일치 항목 만 반환합니다. 크로스 탭 보고서와 거의 같습니다.

SELECT a."JobNumber" AS "Job Number", a."dateIn" AS "Date In", e."created" AS "Invoiced" , a."customer" AS "Customer", a."jobTitle" AS "Job Title", b."created" AS "OFA", c."created" AS "Approved", a."dateShip" AS "Date Due", d."created" AS "Shipped" 
FROM "@ Jobs" a 
INNER JOIN "@ Statuses" b ON (a."ID" = b."fkey" AND b."status" = 'OFA') 
INNER JOIN "@ Statuses" c ON (b."fkey" = c."fkey" AND c."status" IN ('Offset Press','Indigo Press', 'Wide Format Press')) 
INNER JOIN "@ Statuses" d ON (c."fkey" = d."fkey" AND d."status" IN ('Shipped', 'Partially Shipped')) 
INNER JOIN "@ Statuses" e ON (d."fkey" = e."fkey" AND e."status" = 'Invoiced') 

WHERE a."currentStatus" = ? AND e."created" BETWEEN ? AND ? 

ORDER BY a."JobNumber" ASC 

SQL92를 준수해야합니다. MSSQL, Oracle 또는 MySQL은 아니며 FileMaker에서 지원되지 않는 임시 테이블이 없습니다. 파일 메이커 14부터 시작

+4

을 그것은 도움이 될 것이다 기대하고있다. –

+0

@SteveMangiameli 예제 출력은'55996,2015-12-30,2016-02-17 19 : 09 : 24, Bubba J 's Martial Arts, KICTASTICK FLYER, 2016-01-19,2016-01-26,2016- 02-04,2016-02-17' – Rob

+0

입력은 작업의 데이터와 여러 행의 상태 일 것입니다. 이제는 상태 테이블 필드에 fkey (외래 키), 상태 및 날짜가 있습니다. – Rob

답변

0

당신이

SELECT a."JobNumber" AS "Job Number", a."dateIn" AS "Date In", e."created" AS "Invoiced" , a."customer" AS "Customer", a."jobTitle" AS "Job Title", b."created" AS "OFA", c."created" AS "Approved", a."dateShip" AS "Date Due", d."created" AS "Shipped" 
FROM "@ Jobs" a 
INNER JOIN "@ Statuses" b ON (a."ID" = b."fkey" AND b."status" = 'OFA') 
INNER JOIN "@ Statuses" c ON (b."fkey" = c."fkey" AND c."status" IN ('Offset Press','Indigo Press', 'Wide Format Press')) 
INNER JOIN "@ Statuses" d ON (c."fkey" = d."fkey" AND d."status" IN ('Shipped', 'Partially Shipped')) 
INNER JOIN "@ Statuses" e ON (d."fkey" = e."fkey" AND e."status" = 'Invoiced')  
WHERE a."currentStatus" = ? AND e."created" BETWEEN ? AND ?  
ORDER BY a."JobNumber" ASC 
FETCH FIRST 1 ROWS ONLY 

전체 사양 "ONLY FIRST 1 행을 페!"를 사용할 수 있습니다 : 데이터의 샘플 출력을 볼 수

http://help.filemaker.com/app/answers/detail/a_id/12061/~/specifying-offset-and-fetch-first-clauses-in-filemaker-pro-using-the-executesql

+0

그러나 그것은 내가 원하는 결과가 아닙니다. 나는 표 A (Jobs)에서 여러 행을 가져야 만 OFA의 첫 번째 일치 행 인 Approved, Shipped 및 Invoiced. 죄송합니다. 질문을 다시 읽었을 때 명확하지 않다는 것을 깨달았습니다. – Rob

+0

FileMaker에서 지원하지 않는 ROW_NUMBER() 및 OVER (PARTITION BY)와 같은 것을보고 있습니다. –