#sql #sql-server #tsql
Вопрос:
SELECT COUNT(sa.SessionId) AS AttendancePoints, sa.UserId
FROM SessionAttendance sa
WHERE IsParticipated = 1
GROUP BY UserId
SELECT COUNT(sf.Session_Id) AS FeedbackPoints, sf.User_Id
FROM SessionFeedbacks sf
GROUP BY User_Id
SELECT SUM(sac.Points) AS ActivityPoints, sac.UserId
FROM StudentActivities sac
GROUP BY UserId
Есть ли какой-либо способ объединить эти 3 вывода в один вывод, используя общий идентификатор пользователя в SQL Server?
Требуемая Производительность:
User Id | AttendancePoints | FeedbackPoints | ActivityPoints
Комментарии:
1. Пожалуйста, предоставьте примерные данные и желаемые результаты. Ваш вопрос не ясен.
2. Что вы подразумеваете под «присоединиться» — присоединиться-это ключевое слово SQL и с определенным значением. Вы хотите присоединиться к ним? Или объединить наборы результатов? Как и просил Гордон, требуются выборочные данные и желаемые результаты.
3. @DaleK join означает, что мне нужно поместить эти 3 таблицы в одну таблицу
4. @СанджанАсулакшана, но вертикально или горизонтально? Нам нужен пример того, как должны выглядеть ваши данные.
5. @Пример вывода Далека прилагается. Я хочу объединить эти 3 вывода в один вывод, используя этот столбец общего идентификатора пользователя.
Ответ №1:
Просто вставьте их в подзапрос, например.
SELECT AttendancePoints, UserId
FROM (
SELECT COUNT(sa.SessionId) AS AttendancePoints, sa.UserId
FROM SessionAttendance sa
WHERE IsParticipated = 1
GROUP BY UserId
UNION ALL
SELECT COUNT(sf.Session_Id) AS FeedbackPoints, sf.User_Id
FROM SessionFeedbacks sf
GROUP BY User_Id
UNION ALL
SELECT SUM(sac.Points) AS ActivityPoints, sac.UserId
FROM StudentActivities sac
GROUP BY UserId
) X
Комментарии:
1. Это Уокинг. Спасибо
Ответ №2:
with BeginCTE as(
SELECT COUNT(sa.SessionId) AS AttendancePoints, sa.UserId
FROM SessionAttendance sa
WHERE IsParticipated = 1
GROUP BY UserId
),
MiddleCTE as
(
SELECT COUNT(sf.Session_Id) AS FeedbackPoints, sf.UserId
FROM SessionFeedbacks sf
GROUP BY UserId
),
EndCTE as
(
SELECT SUM(sac.Points) AS ActivityPoints, sac.UserId
FROM StudentActivities sac
GROUP BY UserId
)
select a.UserID,a.AttendancePoints,b.FeedbackPoints,c.ActivityPoints from
BeginCTE a
INNER JOIN MiddleCTE b ON a.UserId=b.UserId
INNER JOIN EndCTE c ON b.UserId=c.UserId
Комментарии:
1. Пожалуйста, добавьте дополнительные сведения, чтобы расширить свой ответ, например, ссылки на рабочий код или документацию.
Ответ №3:
- Вы можете использовать union, чтобы объединить их всех в 1
- чтобы сохранить дифференциацию, вы можете создать категорию
with combining_points as (
SELECT COUNT(sa.SessionId) AS AttendancePoints, sa.UserId, 'AttendancePoints' as category
FROM SessionAttendance sa WHERE IsParticipated = 1 GROUP BY UserId
union all
SELECT COUNT(sf.Session_Id) AS FeedbackPoints, sf.User_Id , 'FeedbackScore' as category
FROM SessionFeedbacks sf GROUP BY User_Id
union all
SELECT SUM(sac.Points) AS ActivityPoints, sac.UserId, 'ActivityPoints' as category
FROM StudentActivities sac GROUP BY UserId
)
select * from combining_points
Комментарии:
1. MSSMS Говорит , Msg 207, Уровень 16, Состояние 1, Строка 13 Недопустимое имя столбца «категория». Msg 207, Уровень 16, Состояние 1, Строка 16 Недопустимое имя столбца «категория». Msg 207, Уровень 16, Состояние 1, Строка 19 Недопустимое имя столбца «категория».
2. @триллион вы не можете группироваться по псевдониму таблицы.
3. @SanjanaSulakshana попробуй еще раз
4. @SanjanaSulakshana Я скорректировал
5. @триллион Это не обеспечивает требуемую производительность. Вопрос Обновлен!