I'm working on this query in a stored procedure. The data structure in simplified terms looks like this: a table containing the tables:
- Person
- Elec_Nominations
- Elec_Vacancy
- Ward
- Sector
What happens is a number of vacant seats are set for a sector within a ward. Individuals that are nominated for a seat are inputted into the Person database and linked to Elec_Nominations. This nomination is linked to Ward through Elec_Vacancy. The Nomination is also linked to the Sector (ELEC_SPEAKER_SECTOR) through Elec_Vacancy and some further link tables:

The query I'm working on
SELECT DISTINCT
    p.PERSON_ID,
    p.ID_NUMBER,
    CONCAT(p.FULLNAMES, (CONCAT((' ' COLLATE Latin1_General_CI_AS), p.SURNAME))) AS NAME,
    o.ORG_NAME,
    eiw.INTEREST_WARD_ID,
    scw.SUBCOUNCIL_ID,
    w.WARD_ID,
    ess.SPEAKER_SECTOR_ID,
    (SELECT TOP 1
     essg.NO_OF_SEATS
     FROM
         ELEC_SPEAKER_SECTOR_GROUP essg
         INNER JOIN ELEC_VACANCY ev ON essg.VACANCY_ID = ev.VACANCY_ID
     WHERE
         ev.VACANCY_ID = en.VACANCY_ID
     ORDER BY
         essg.ELEC_SECTOR_GROUP_SECTORS_ID DESC) AS SECTORSEATS,
    en.SECTOR_TEXT AS SECTORTEXT
    --essg.NO_OF_SEATS AS [SECTORSEATS]
FROM
    PERSON p
RIGHT OUTER JOIN 
    ELEC_NOMINATIONS en ON p.PERSON_ID = en.PERSON_ID
RIGHT OUTER JOIN 
    ELEC_INTEREST_WARD eiw ON en.INTEREST_WARD_ID = eiw.INTEREST_WARD_ID
LEFT JOIN 
    ELEC_INTEREST_GROUP eig ON eiw.INTEREST_GROUP_ID = eig.INTEREST_GROUP_ID
LEFT JOIN 
    ORGANISATION o ON eig.ORG_ID = o.ORG_ID
LEFT JOIN 
    WARD w ON eiw.WARD_ID = w.WARD_ID
LEFT JOIN 
    ELEC_SPEAKER_SECTOR ess ON eiw.SPEAKER_SECTOR_ID = ess.SPEAKER_SECTOR_ID
LEFT JOIN 
    SUBCOUNCILWARD scw ON w.WARD_ID = scw.WARD_ID
    --INNER JOIN ELEC_VACANCY ev ON en.VACANCY_ID = ev.VACANCY_ID
    --INNER JOIN ELEC_SPEAKER_SECTOR_GROUP essg ON ev.VACANCY_ID = essg.VACANCY_ID
WHERE
    ess.SPEAKER_SECTOR_ID IN (SELECT s.item FROM ufn_SplitIntArray(@P_Sectors, ',') s)
    AND w.WARD_ID IN (SELECT s.item FROM ufn_SplitIntArray(@P_Wards, ',') s)
    AND o.ORG_ID = @P_Org_ID
    --AND en.ELECTED = 1
ORDER BY
    w.WARD_ID
The output of this query go's into this GridView:

OK, I still need to get some clarity from the client as to how the sector seats are determined. The problem is that if I say en.Elected = 1, it shows only the persons who were elected as it should, but it doesn't show the sectors and wards where there isn't even a vacancy (ie. the 3rd and 5th row won't show).
As I'm typing this, I thought of something. I will try and research to determine if I can do something like this:
AND EVAL(ISNULL(en.NOMINATION_ID, 1))
Or something in SQL like:
if(en.NOMINATION_ID == null)
    true
else
    en.Elected == true
 
     
     
    