[ОБНОВЛЕНО]: Я обновил вопрос с помощью предложения WHERE
.Полный Outer Присоединиться к группе
У меня есть следующий скрипт SQL. Результат:
| User | Name | Time |
|--------|---------------|--------|
| 00001 | Mary Jane | 12 |
| 00002 | Joana Smith | 7 |
| 00003 | George Andrz | 2 |
| 00004 | Julia Roberts | 4 |
Я ожидал этого:
| User | Name | Time |
|--------|---------------|--------|
| 00001 | Mary Jane | 12 |
| 00002 | Joana Smith | 7 |
| 00003 | George Andrz | 2 |
| 00004 | Julia Roberts | 4 |
| 90000 | Anderson Math | 0 |
| 90001 | Josh Xin | 0 |
Разница заключается в: Есть некоторые пользователи в MainUsers таблицы, которые не могли бы сделать табель еще, так что TimeSheet стол пуст для человека. Но я хотел бы показать имя, с Time = 0
сервера Настройка MS SQL 2008 схемы:
CREATE TABLE MainUsers
(
id int identity primary key,
UserID varchar(5),
FullName varchar(500),
);
INSERT INTO MainUsers
(UserID, FullName)
VALUES
('00001', 'Mary Jane'),
('00002', 'Joana Smith'),
('00003', 'George Andrz'),
('00004', 'Julia Roberts'),
('90000', 'Anderson Math'),
('90001', 'Josh Xin');
CREATE TABLE TimeSheet
(
id int identity primary key,
UserID varchar(5),
FullName varchar(500),
Minutes int,
TimeStamp Datetime,
);
INSERT INTO TimeSheet
(UserID, FullName, Minutes, TimeStamp)
VALUES
('00001', 'Mary Jane', 240, '2015-09-16 08:16:00'),
('00001', 'Mary Jane', 480, '2015-09-16 08:16:00'),
('00002', 'Joana Smith', 320, '2015-09-16 08:16:00'),
('00002', 'Joana Smith', 120, '2015-09-16 08:16:00'),
('00003', 'George Andrz', 120, '2015-09-16 08:16:00'),
('00004', 'Julia Roberts', 240, '2015-09-16 08:16:00');
Запрос 1:
SELECT u.UserID AS [User], u.FullName AS Name,
SUM(t.Minutes)/60 AS [Time]
FROM MainUsers u LEFT JOIN
TimeSheet t
ON u.UserID = t.UserID
WHERE
month(TimeStamp) = 9 and year(TimeStamp) = 2015
GROUP BY u.UserID, u.FullName
ORDER BY u.UserID ASC
| User | Name | Time |
|-------|---------------|------|
| 00001 | Mary Jane | 12 |
| 00002 | Joana Smith | 7 |
| 00003 | George Andrz | 2 |
| 00004 | Julia Roberts | 4 |
Спасибо.
Почему вы используете полное внешнее соединение вместо левого соединения? – Beth
Потому что левое соединение тоже не работает. Я думаю, что Full Outer должен работать, но это не так. – Khrys
нет, вам нужно оставить внешнее соединение со своей основной таблицей (пользователями) с соответствующей таблицей (расписанием). Чтобы присоединиться к последовательности, которую у вас есть, расписание -> пользователи, вы должны использовать ПРАВИЛЬНОЕ внешнее соединение. – Beth