SQL: выбор данных из нескольких таблиц с несколькими записями для выбора и объединения

#sql

#sql

Вопрос:

У меня есть три таблицы: VolunteerRelationships, Organizations и CampaignDates. Я пытаюсь написать запрос, который даст мне идентификатор и название организации, а также даты начала и окончания кампании организации для текущего года кампании <@CampaignYear> на основе выбранного добровольца <@SelectedInd>.

Даты хранятся в виде отдельных значений столбцов для дня, месяца и года, которые я пытаюсь преобразовать в более отформатированное значение даты. Если я смогу это получить, я также хотел бы использовать оператор case, чтобы получить статус кампании на основе того, являются ли даты кампании предстоящими, запущенными в данный момент или уже закрытыми, но сначала нужно получить первую часть запроса.

Извините, если я упускаю много необходимой информации, но я впервые публикую вопрос на этом форуме. Спасибо!

 VolunteerRelationships
id | name | managesId |expiryDate
1  | john | 1         |
2  | jack | 2         |6/30/2020
3  | jerry| 3         |12/31/2021

Organizations
 id | name1 
 1  | ACME

CampaignDates
orgId | dateDay | dateMonth | dateYear | dateType | Campaign Year
1     | 5       | 11        | 2020     | Start    | 2020
1     | 15      | 11        | 2020     | End      | 2020

Result
    orgId | orgName | startDate | endDate    | Status 
    1     | ACME    | 2020-01-01| 2020-01-15 | Closed 




select 
v.MANAGEDACCOUNT,
o.Name1, 
select * from 
    (select cast(cast dateyear*1000   datemonth*100   dateday as varchar(255)) as date as date1 from  <@Schema>.CampaignDates where datetype = 'Start' and campaignyear =   <@CampaignYear> and orgaccountnumber = v.MANAGEDACCOUNT) d1,
    (select cast(cast dateyear*1000   datemonth*100   dateday as varchar(255)) as date as date2 from  <@Schema>.CampaignDates where datetype = 'End' and campaignyear =     <@CampaignYear> and orgaccountnumber = v.MANAGEDACCOUNT) d2
from <@Schema>.VolunteerRelationships v
inner join <@Schema>.organizations o
on o.accountnumber=v.MANAGEDACCOUNT
where v.VOLUNTEERACCOUNT = <@SelectedInd> and ( v.EXPIRYDATE IS NULL OR v.EXPIRYDATE > <@Today> )
 

Комментарии:

1. Почему вы отметили как mysql, так и sql-server?

2. @HoneyboyWilson исправил теги.

3. Но какую СУБД вы используете? SQL — это всего лишь язык запросов, который отличается от СУБД к СУБД.

4. @HoneyboyWilson Это старая устаревшая CRM-система (Andar 360), в которой есть приложение для построения запросов. Пожалуйста, дайте мне знать, если есть что-то более конкретное, что я могу предоставить, чтобы прояснить любую путаницу.