IF 또는 CASE 문을 where 절에 포함시켜야합니다.이 절은 db의 데이터에 따라 레코드를 제공합니다.IF를 where 절에 포함합니다.
내가 원하는 것은 relationship_code_id에 특정 코드가있는 특정 연락처를 선택하여 POA (코드 45)가 할당되었음을 나타냅니다. 연락처에 POA가 없으면 기본 연락처 (main_contact = 1)를 표시합니다. 그러나 POA가있는 컨택은 주 컨택보다 우선합니다. 따라서 Joe Bloggs에 주 연락처가 할당되었지만 Anne Nickols가 POA를 할당 받았다면 Anne not Joe를 보여줍니다.
나는이 작업을 수행 할 수 있습니다 어쨌든 거기에 (이 정보는 TNTGROUP 테이블에 포함)?
사과하지 않으면 사과드립니다.
이 내 아래 코드입니다SELECT
TNTTITLE.Description_VC AS TITLE
,TNTCONTACT.Forename_VC AS FORENAME
,TNTCONTACT.Surname_VC AS SURNAME
,TNTCONTACTEMAIL.Reference_VC AS EMAIL
,TNTHOMENUMBER_GRP.Reference_VC AS GROUP_HOME_NUMBER
,RENTACC.ID AS RENT_ACCOUNT_ID
,CONVERT(DATE,RENTACC.AccountStartDate) AS RENT_ACCOUNT_START_DT
,CASE
WHEN LETOFFERS.Current_Status_ID = 42 THEN 'Complete'
ELSE 'OTHER'
END
AS STATUS
,ASSETTYPES.Description_VC AS ASSET_NAME
,CASE WHEN (SELECT MainAsset FROM RENTACC HAVING COUNT(*) > 1) THEN 1 ELSE 0 END
FROM RENT_ACCOUNTS AS RENTACC
INNER JOIN LETTING_OFFERS_T AS LETOFFERS
ON RENTACC.ID = LETOFFERS.Rent_Account_Reference_VC
AND RENTACC.AccountEndDate IS NULL
AND RENTACC.AccountType = 'T'
LEFT JOIN Letting_SYS_Master_T AS LETCODES
ON LETOFFERS.Current_Status_ID = LETCODES.CODE_ID
AND LETCODES.Type_ID = '14'
LEFT JOIN Asset_Assets_T AS ASSETS
ON RENTACC.MainAsset = ASSETS.Asset_ID
LEFT JOIN Asset_Types_T AS ASSETTYPES
ON ASSETS.Asset_TYPE_ID = ASSETTYPES.Asset_Type_ID
/**** MAIN CONTACT INFORMATION ****/
LEFT JOIN Shared_Addresses_T AS TNTADDRESS
ON ASSETS.Address_ID = TNTADDRESS.Address_ID
LEFT JOIN Contact_Group_Contacts_T AS TNTGROUP
ON RENTACC.ContactDatabaseReference = TNTGROUP.GROUP_ID
AND TNTGROUP.Main_Group_Contact_BT = 1
AND TNTGROUP.Removed_BT = 0
LEFT JOIN CONTACT_CONTACTS_T AS TNTCONTACT
ON TNTGROUP.Contact_ID = TNTCONTACT.Contact_ID
AND TNTCONTACT.Current_Status_ID = 65
AND TNTCONTACT.Deceased_Date_DT IS NULL
LEFT JOIN Shared_Codes_T AS TNTTITLE
ON TNTCONTACT.Title_Code_ID = TNTTITLE.Code_ID
AND TNTTITLE.Code_ID IN (103,104,105,106)
/**** CONTACT EMAIL INFORMATION ****/
LEFT JOIN Contact_Contact_Details_T AS TNTCONTACTEMAIL
ON TNTCONTACT.Contact_ID = TNTCONTACTEMAIL.Contact_ID
AND TNTCONTACTEMAIL.SYS_Number_Code_ID = 75
AND TNTCONTACTEMAIL.Expiry_Date_DT IS NULL
/**** GROUP HOME NUMBER INFORMATION ****/
LEFT JOIN Contact_Group_Details_T AS TNTHOMENUMBER_GRP
ON RENTACC.ContactDatabaseReference = TNTHOMENUMBER_GRP.Group_ID
AND TNTHOMENUMBER_GRP.Expiry_Date_DT IS NULL
AND TNTHOMENUMBER_GRP.SYS_Number_Code_ID = 71
그것은 AND/OR 대신에 케이스의 사용에 일반적으로 더 나은/WHERE 및 조항 ON 경우. – jarlh
도움이 필요한 것만 표시하도록 코드를 최소화하십시오. 읽고 이해하기가 정말로 어렵습니다. – Stephen
@jarlh 그리고 내 대답으로 그 중 아무 것도 사용하지 않는 것이 더 좋습니다. D – Hogan