我有两个查询,每个查询的输出如下所示:
SELECT UserID, ActivityDate, ActivityDay, ActivityTime
FROM Activities
WHERE ActivityType='MYS'
SELECT USerID, TimeFrom, TimeTo, ActivityDay
FROM [dbo].[userActivities] WHERE UserID=123
预期结果:
两个查询都可以使用以下链接:
我需要从第一个数据集中获得所有4行,并且需要添加的新列基于第二个查询中的值。 ActvityDay 7有两条记录,因为在下一次查询ActvityDay 7时有两条记录
我试图使用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
答案 0 :(得分:0)
您的联接和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
请参见demo。
结果:
> 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