如何显示所有字段而不管匹配?

时间:2010-10-15 19:48:56

标签: sql ms-access

我有两个表,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];

4 个答案:

答案 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?这可能对你意味着同样的事情。