Как отобразить все поля независимо от совпадения? - PullRequest
1 голос
/ 15 октября 2010

У меня есть две таблицы, ProblemChildren и DailyTable.ProblemChildren состоит из идентификатора и имени.DailyTable состоит из идентификатора, имени и date_hit.

Прямо сейчас я отображаю все ProblemChildren.name, где он существует в DailyTable.Поэтому, если имя «Майк» в ProblemChildren не имеет записи в DailyTable, его имя не выводится.

Опять же, сейчас он отображает имя ProblemChildren.name и сумму, сколько раз имя может быть найдено в DailyTable.Если «Mike» не найден в DailyTable, из ProblemChildren.name, тогда я все еще хочу, чтобы вывод отображал «Mike» как 0.

Как я могу это сделать?

TRANSFORM Sum(DT.[Page Views]) AS [SumOfPage Views]
SELECT PC.CA_NTID AS ntid, PC.CA_Name
FROM tbl_ProblemChildren AS PC 
LEFT JOIN [Daily Table] DT 
ON DT.ntid = PC.CA_NTID 
WHERE DT.[report date] > #6/1/2010#
GROUP BY PC.CA_NTID, PC.CA_Name
PIVOT DT.[report date];

Ответы [ 4 ]

2 голосов
/ 15 октября 2010
SELECT p.id, p.name, COUNT(d.date_hit)
FROM ProblemChildren p 
LEFT JOIN DailyTable d
ON d.id = p.id AND d.report_date > mm/dd/yyyy
GROUP BY  p.id, p.name

Или после обновления вопроса и обратной связи в комментариях возможно

TRANSFORM Sum(DT.[Page Views]) AS [SumOfPage Views]
SELECT 
     PC.CA_NTID AS ntid, 
     PC.CA_Name
FROM tbl_ProblemChildren AS PC 
LEFT JOIN
(
SELECT [Page Views], [report date], ntid
FROM [Daily Table]  
WHERE [report date] > #6/1/2010#
) DT
ON DT.ntid = PC.CA_NTID 
GROUP BY PC.CA_NTID, PC.CA_Name
PIVOT DT.[report date];

Или решение Типкса

TRANSFORM Sum(DT.[Page Views]) AS [SumOfPage Views]
SELECT PC.CA_NTID AS ntid, PC.CA_Name
FROM tbl_ProblemChildren AS PC 
LEFT JOIN [Daily Table] DT 
ON DT.ntid = PC.CA_NTID 
WHERE DT.[report date] > #6/1/2010# OR DT.[report date] IS NULL
GROUP BY PC.CA_NTID, PC.CA_Name
PIVOT DT.[report date];
1 голос
/ 15 октября 2010

Я рискну предположить, что вы используете генератор запросов Access (графический интерфейс, который позволяет создавать запросы).

Если это так, щелкните правой кнопкой мыши на строке, соединяющей две таблицы, и выберите «Показать все строки из ProblemChildren и только те строки из DailyTable, у которых есть совпадение» (или что-то подобное, у меня нет Access передо мной) затем повторите запрос.

0 голосов
/ 15 октября 2010
select *, count(*) from ProblemChildren pc 
right outer join DailyTable dt on pc.ID=dt.ID group by pc.ID

Код может быть не идеальным, но дело в том, что вам нужно внешнее соединение, чтобы сохранить значения от обоих.Нужно ли устанавливать выход = 0 вместо NULL на уровне базы данных?Это может означать то же самое для вас.

0 голосов
/ 15 октября 2010

Я думаю, что LEFT JOIN поможет здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...