두 항목 : Entitlement 및 Entitlement_Data가 있습니다. 각 Entitlement는 증가하는 ID (IDENTITY)로 식별되며 유형이 각각 다른 여러 Entitlement_Data 항목을 가질 수 있습니다. 0 (주별) 또는 1 (월별) (EntitlementID 및 Type은 Entitlement_Data의 PK, EntitlementID는 FK to Entitlement 테이블). 각 자격에 대한 , 내가 필요로 :두 개의 항목 사이에 일치 항목을 얻기 위해 자체 OUTER JOIN에 대한 대안 내 db 모델에있는
- 첫 번째 NULL이 아닌 값을 가져에서 중 월 (유형 = 1) 또는 주간 (유형 = 0) Entitlement_Data, Entitlement_Data의 주어진 속성에 대해 (SharesPaid, LocalTaxRate , etc ...) - SELECT의 첫 번째 부분.
- 월간 및 주간 Entitlement_Data 항목 (SharesPaid_Match, etc ...) 사이의 일치/불일치에 대한 표시 - SELECT의 마지막 부분.
이 내가 쿼리를 사용하고있다 기압 :
SELECT
COALESCE(MD.EntitlementID, WD.EntitlementID) AS EntitlementID,
COALESCE(MD.LocalTaxRate, WD.LocalTaxRate) AS LocalTaxRate,
COALESCE(MD.SharesPaid, WD.SharesPaid) AS SharesPaid,
COALESCE(MD.LocalTaxAmount, WD.LocalTaxAmount) AS LocalTaxAmount,
COALESCE(MD.LocalTaxEquivalent, WD.LocalTaxEquivalent) AS LocalTaxEquivalent,
COALESCE(MD.NetReceived, WD.NetReceived) AS NetReceived,
COALESCE(MD.LocalTaxCurrency, WD.LocalTaxCurrency) AS LocalTaxCurrency,
COALESCE(MD.Currency, WD.Currency) AS Currency,
COALESCE(MD.ReleaseDate, WD.ReleaseDate) AS ReleaseDate,
(
CASE
WHEN MD.LocalTaxEquivalent IS NULL OR WD.LocalTaxEquivalent IS NULL THEN NULL
WHEN MD.LocalTaxEquivalent <> WD.LocalTaxEquivalent THEN 0
ELSE 1
END
) AS LocalTaxEquivalent_Match,
(
CASE
WHEN MD.NetReceived IS NULL OR WD.NetReceived IS NULL THEN NULL
WHEN MD.NetReceived <> WD.NetReceived THEN 0
ELSE 1
END
) AS NetReceived_Match,
(
CASE
WHEN MD.SharesPaid IS NULL OR WD.SharesPaid IS NULL THEN NULL
WHEN MD.SharesPaid <> WD.SharesPaid THEN 0
ELSE 1
END
) AS SharesPaid_Match,
(
CASE
WHEN MD.Currency IS NULL OR WD.Currency IS NULL THEN NULL
WHEN MD.Currency <> WD.Currency THEN 0
ELSE 1
END
) AS Currency_Match,
(
CASE
WHEN MD.DividendRate IS NULL OR WD.DividendRate IS NULL THEN NULL
WHEN MD.DividendRate <> WD.DividendRate THEN 0
ELSE 1
END
) AS DividendRate_Match,
(
CASE
WHEN MD.LocalTaxRate IS NULL OR WD.LocalTaxRate IS NULL THEN NULL
WHEN MD.LocalTaxRate <> WD.LocalTaxRate THEN 0
ELSE 1
END
) AS LocalTaxRate_Match
FROM
Entitlement_Data MD
FULL OUTER JOIN Entitlement_Data WD
ON MD.EntitlementID = WD.EntitlementID
WHERE
WD.Type = 0 AND MD.Type = 1
FULL OUTER을 피하기 가입하고 내가 필요한 정보를 얻을 수있는 방법이 있나요? 나는 GROUP BY의 사용법을 평가했지만 필요한 결과를 얻지 못하는 것 같습니다. 감사합니다.
단일 자격 부여 ID의 경우 여러 개의 월간 값과 여러 주 값이 있습니까? 아니면, 단지 각각 1 개입니까? 배수가있는 경우 하나의 레코드 만 선택하려는 규칙은 무엇입니까? 가장 빠른 데이트 기록? 또는 다른 것? – MatBailie
아니요, 각각 (EntitlementID, Type)에 대해 하나의 항목이 있습니다. (EntitlementID, Type)에 대한 PK 제약 조건이 있습니다. –
@Dems "... EntitlementID 및 Type은 PK ..."이므로 권한 부여를위한 월간 값은 하나뿐입니다 신분증. –