Запрос найти детей старше 10 лет - PullRequest
0 голосов
/ 20 июня 2019

У меня есть проект, в котором я должен был создать церковную базу данных.После его создания мне нужно выполнить SQL-запрос, чтобы найти всех родителей-одиночек с детьми в возрасте до 10

. У меня есть столбец семейного положения в таблице «Члены», который я использовал для поиска родителей-одиночек, среди которыхдваНо как только я уберу его, проверка возраста не сработает.Ниже приведен чек для одного родителя.

  --inner join Children c on c.Father_Id = p.Member_Id 
  --or c.Mother_Id = p.Member_Id

select p.[First Name] 
from Members p, Children c
where p.[Marital Status] = 1 and (GETDATE() - c.Birthday) > 10

Я ожидаю, что в список будут включены только два родителя.

Редактировать 1.Полный запрос:

select distinct p.[First Name] from Members p inner join Children c on c.Father_Id = p.Member_Id or c.Mother_Id = p.Member_Id where p.[Marital Status] = 1 and (GETDATE() - c.Birthday) > 10

Редактировать 2. Образцы данных Образцы данных

Редактировать 3. Цель состоит в том, чтобы увидеть только родителей-одиночек с детьми в возрасте до 10 лет. Таким образом, в этом единственном отчетедолжно отображаться должно быть Ким и Томас

Ответы [ 3 ]

1 голос
/ 20 июня 2019

Вы должны использовать < 10 вместо > 10:

select distinct p.[First Name]
from Members p
  inner join Children c on c.Father_Id = p.Member_Id
  or c.Mother_Id = p.Member_Id
  where p.[Marital Status] = 1 and (GETDATE() - c.Birthday) < 10
1 голос
/ 20 июня 2019

Это дает вам одного члена:

select * from dbo.Members m
where m.[Marital Status] = 1

Это дает вам детей до 10 лет:

select * from dbo.Children c
where DATEDIFF(year, GETDATE(), c.Birthday) < 10

Теперь вам нужно собрать их вместе, и похоже, что это по Member_Id = Father_Id или Member_Id = Mother_Id, я бы использовал COALESCE () просто для простоты:

select m.* from dbo.Members m
inner join dbo.Children c on COALESCE(c.Father_Id, c.Mother_Id) = m.Member_Id
where m.[Marital Status] = 1
and DATEDIFF(year, GETDATE(), c.Birthday) < 10

Вы также можете просто посмотреть на детей с NULL Mother_Id или NULL Father_Id, так как это, кажется, указывает на ребенка с одним родителем, а не на другого.

select * from dbo.Children c
where (c.Mother_Id is null or c.Father_Id is null)
and DATEDIFF(year, GETDATE(), c.Birthday) < 10
0 голосов
/ 20 июня 2019

Использовать функцию сравнения даты.

   select distinct p.[First Name]
    from Members p
    inner join Children c on c.Father_Id = p.Member_Id
    or c.Mother_Id = p.Member_Id
     where p.[Marital Status] = 1 and DATEDIFF(year, c.Birthday, GETDATE()) > 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...