I am trying to link different keys together. The following problem the projid key has to be joint on ServiceObjectId and on TaskId. The easiest way to do this seems to use an or statement.
So:
FULL JOIN PROJTABLE
ON PROJTABLE.PROJID = MSM_TASKTABLE.PROJID
or PROJTABLE.PROJID = MSM_SERVICEOBJECTTABLE.SERVICEOBJECTID
However the performance is dreadful Thats way i tried to use the COALESCE function. As shown in the following script
INSERT INTO AR_BI_sleutels (DataareaId,PartyId,ContractId,RentalObjectId,ObjectId,ServiceObjectId,ServiceCallId,TaskId,ProjId)
Select
,PMCCONTRACT.CONTRACTID
,PMCCONTRACTOBJECT.RENTALOBJECTID
,PMEOBJECT.OBJECTID
,MSM_SERVICEOBJECTTABLE.SERVICEOBJECTID
,MSM_SVCCALLTABLE.SVCCALLID
,MSM_TASKTABLE.TASKID
,COALESCE(TASK.PROJID,SERVICE.PROJID) AS PROJID
From PMCCONTRACT
FULL JOIN PMCCONTRACTOBJECT
ON PMCCONTRACTOBJECT.RENTALOBJECTID = PMCCONTRACT.RENTALOBJECTID
AND PMCCONTRACTOBJECT.DATAAREAID = PMCCONTRACT.DATAAREAID
FULL JOIN MSM_SERVICEOBJECTTABLE
ON MSM_SERVICEOBJECTTABLE.EXTOBJECTID = PMEOBJECT.OBJECTID
FULL JOIN MSM_SVCCALLTABLE
ON MSM_SVCCALLTABLE.SERVICEOBJECTID = MSM_SERVICEOBJECTTABLE.SERVICEOBJECTID
FULL JOIN MSM_TASKTABLE
ON MSM_TASKTABLE.SVCCALLID = MSM_SVCCALLTABLE.SVCCALLID
FULL JOIN PROJTABLE as Task
ON Task.PROJID = MSM_TASKTABLE.PROJID
FULL JOIN PROJTABLE as Service
ON service.PROJID = MSM_SERVICEOBJECTTABLE.SERVICEOBJECTID
WHERE (PMCCONTRACT.CONTRACTSTATUS is null OR PMCCONTRACT.CONTRACTSTATUS <> 5)
AND COALESCE(TASK.PROJID,SERVICE.PROJID) IS NOT NULL
However this statement returns duplicate values. Any ideas on how i could make the working correctly?