Operation Details
Description: Counts the numbers of appealed issue, product delivery and appeal cases.
Sterotype: ns
SQL
SELECT DISTINCT
  AppealedPDs.numPDCases,
  AppealedIssues.numIssueCases,
  AppealedAppeals.numAppealCases,
  AppealedICs.numIntegratedCases

INTO
:productDeliveryCount,
:issueCount,
:appealsCount,
:integratedCaseCountOpt

FROM
AppealRelationship

LEFT OUTER JOIN (
SELECT 
COUNT(*) AS numPDCases,
AppealRelationship.appealCaseID

FROM
AppealRelationship, 
CaseHeader

WHERE 
CaseHeader.caseTypeCode = :productDeliveryCaseTypeCode AND 
CaseHeader.caseID = AppealRelationship.caseID AND
AppealRelationship.appealCaseID = :caseID 
GROUP BY AppealRelationship.appealCaseID

) AppealedPDs
ON (AppealedPDs.appealCaseID = AppealRelationship.appealCaseID)

LEFT OUTER JOIN (
SELECT 
COUNT(*) AS numIssueCases,
AppealRelationship.appealCaseID

FROM
AppealRelationship, 
CaseHeader

WHERE 
CaseHeader.caseTypeCode = :issueCaseTypeCode AND 
CaseHeader.caseID = AppealRelationship.caseID AND
AppealRelationship.appealCaseID = :caseID

GROUP BY AppealRelationship.appealCaseID
) AppealedIssues
ON (AppealedIssues.appealCaseID = AppealRelationship.appealCaseID)

LEFT OUTER JOIN (
SELECT 
COUNT(*) AS numAppealCases,
AppealRelationship.appealCaseID

FROM
AppealRelationship, 
CaseHeader

WHERE 
CaseHeader.caseTypeCode = :appealCaseTypeCode AND 
CaseHeader.caseID = AppealRelationship.caseID AND
AppealRelationship.appealCaseID = :caseID

GROUP BY AppealRelationship.appealCaseID
) AppealedAppeals
ON (AppealedAppeals.appealCaseID = AppealRelationship.appealCaseID)

LEFT OUTER JOIN (
SELECT 
COUNT(*) AS numIntegratedCases,
AppealRelationship.appealCaseID

FROM
AppealRelationship, 
CaseHeader

WHERE 
CaseHeader.caseTypeCode = :integratedCaseTypeCodeOpt AND 
CaseHeader.caseID = AppealRelationship.caseID AND
AppealRelationship.appealCaseID = :caseID 
GROUP BY AppealRelationship.appealCaseID

) AppealedICs
ON (AppealedICs.appealCaseID = AppealRelationship.appealCaseID)

WHERE 
AppealRelationship.appealCaseID = :caseID