LEFT JOIN не возвращает желаемых результатов - PullRequest
0 голосов
/ 23 января 2020

У меня есть два запроса, и вывод для каждого из них выглядит так, как показано ниже:

SELECT UserID, ActivityDate, ActivityDay, ActivityTime
FROM Activities 
WHERE ActivityType='MYS'

enter image description here

SELECT USerID, TimeFrom, TimeTo, ActivityDay
FROM [dbo].[userActivities]  WHERE UserID=123

enter image description here

Ожидаемый результат:

Оба запроса можно связать с помощью следующего:

  • Activities.UserID = userActivities .UserID
  • Activities.ActivityDay = userActivities.ActivityDay

Мне нужно иметь все 4 строки из первого набора данных, и новые столбцы, которые необходимо добавить, основаны на значениях в второй запрос. Для ActvityDay 7 есть две записи, потому что в следующем запросе для ActvityDay 7 есть две записи

enter image description here

Я пытался извлечь данные, используя LEFT JOIN но не получил желаемого результата. Может кто-нибудь, пожалуйста, дайте мне знать, что я делаю неправильно?

Запрос я пытаюсь:

SELECT DISTINCT AD.UserID, AD.ActiityDate, AD.ActivityDay, AD.ActivityTime,
CASE WHEN AD.ActiityDate = userActivities.ActivityDay THEN 'Yes' ELSE 'No' END AS [ActivityExists],
CASE WHEN AD.ActiityDate = userActivities.ActivityDay THEN UA.TimeFrom ELSE '' END AS [Time],
FROM Activities AD LEFT JOIN userActivities UA ON AD.UserID=UA.UserID 
AND AD.ActiityDate = userActivities.ActivityDay

1 Ответ

0 голосов
/ 23 января 2020

Ваши объединения и выражения CASE основаны на неправильных столбцах. Также, поскольку вы используете псевдонимы для таблиц, используйте псевдонимы и не смешивайте имена таблиц и псевдонимы. Попробуйте это:

SELECT DISTINCT 
  AD.UserID, AD.ActivityDate, AD.ActivityDay, AD.ActivityTime,
  CASE WHEN AD.ActivityDay = UA.ActivityDay THEN 'Yes' ELSE 'No' END AS [ActivityExists],
  CASE WHEN AD.ActivityDay = UA.ActivityDay THEN UA.TimeFrom ELSE '' END AS [Time]
FROM Activities AD LEFT JOIN userActivities UA 
ON AD.UserID=UA.UserID  AND AD.ActivityDay = UA.ActivityDay

См. Демоверсию . Результаты:

> UserID | ActivityDate | ActivityDay | ActivityTime | ActivityExists | Time    
> -----: | :----------- | ----------: | :----------- | :------------- | :-------
>    123 | 2020-01-20   |           1 | 2:20 PM      | No             |         
>    123 | 2020-01-23   |           4 | 2:54 PM      | No             |         
>    123 | 2020-01-24   |           5 | 3:06 PM      | Yes            | 9:10 AM 
>    123 | 2020-01-28   |           7 | 11:00 AM     | Yes            | 11:15 AM
>    123 | 2020-01-28   |           7 | 11:00 AM     | Yes            | 12:05 PM
...