我有两个表,ProblemChildren和DailyTable。 ProblemChildren由ID和名称组成。 DailyTable由ID,name和date_hit组成。
现在,我正在显示DailyTable中存在的所有ProblemChildren.name。因此,如果ProblemChildren中的名称“Mike”在DailyTable中没有记录,则不输出他的名字。
现在再次,它正在使用ProblemChildren.name以及在DailyTable中找到该名称的次数总和。如果在DailyTable中找不到“Mike”,来自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];
答案 0 :(得分:2)
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];
或Tipx的解决方案
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 :(得分:1)
我猜测你正在使用Access'查询生成器(允许你构建查询的图形界面)。
如果是这样,右键单击连接两个表的行并选择“显示来自ProblemChildren的所有行,只显示DailyTable中那些匹配的行”(或类似的东西,我没有在我面前的Access)然后重试查询。
答案 2 :(得分:0)
我认为LEFT JOIN会有所帮助。
答案 3 :(得分:0)
select *, count(*) from ProblemChildren pc
right outer join DailyTable dt on pc.ID=dt.ID group by pc.ID
代码可能不完美,但关键是你需要一个外连接才能保持两者的值。是否在数据库级别设置输出= 0而不是NULL?这可能对你意味着同样的事情。