当没有匹配项时,SQL left join不返回任何内容

当没有匹配项时,SQL left join不返回任何内容,sql,join,Sql,Join,我正在编写一个将计数添加到两个字段的存储过程。我有以下代码: SELECT Distinct DateTime1,SUM(TICKETREQ1)SUMREQ, SUM(TicketPU1)SUMPU1, (count(*))AS GRADCOUNT FROM TABLEA WHERE YEAR = '2015' AND TicketReq1 > 0 group by DateTime1 Select DISTINCT(Dat

我正在编写一个将计数添加到两个字段的存储过程。我有以下代码:

    SELECT Distinct DateTime1,SUM(TICKETREQ1)SUMREQ, SUM(TicketPU1)SUMPU1, (count(*))AS GRADCOUNT
    FROM TABLEA
    WHERE YEAR = '2015'
        AND TicketReq1 > 0
        group by DateTime1

    Select DISTINCT(DateTime2),SUM(TicketReq2) SUMREQ,SUM(TicketPU2)SUMPU2, (count(*))AS GRADCOUNT
    from TABLEA
    where TicketReq2 > 0
        and YEAR = '2015'
        Group by DateTime2;


SELECT Distinct c.DateTime1,SUM(c.TICKETREQ1 + b.TicketReq2)SUMREQ, SUM(c.TicketPU1 + b.TicketPU2)SUMPU1, (count(b.id) + count(c.id))AS GRADCOUNT
FROM TABLEA c
LEFT JOIN TABLEA b 
    ON (b.DateTime2 = c.DateTime1
    AND b.TicketReq2 > 0
    AND b.YEAR = '2015')
WHERE c.YEAR = '2015'
AND c.TicketReq1 > 0
group by c.DateTime1
这将返回:

对于某些仪式,第二个查询确实会引入结果并正确添加它们。但如果没有记录,它就会失败



我如何让它将两个计数合并在一起(查询1和查询2),以便查询3即使在没有匹配的情况下也显示两个计数

尝试完全外部联接而不是左联接

SELECT Distinct c.CeremonyDateTime1,SUM(c.TICKETREQ1 + b.TicketReq2)SUMREQ, SUM(c.TicketPU1 + b.TicketPU2)SUMPU1, (count(b.gid) + count(c.gid))AS GRADCOUNT
FROM ComTicket c
FULL OUTER JOIN ComTicket b 
ON (b.CeremonyDateTime2 = c.CeremonyDateTime1
AND b.TicketReq2 > 0
AND b.Gradterm = '201540')
WHERE c.gradterm = '201540'
AND c.TicketReq1 > 0
group by c.CeremonyDateTime1

这可能会对您有所帮助。

问题在于查询3中的
SUM
语句
b.TicketReq2
为空,因此
SUM(c.TICKETREQ1+b.TicketReq2)
应遇到错误。在
SUM
函数调用中尝试使用
ISNULL(b.TicketReq2,0)

问题可能出在查询3的SUM语句中。b、 TicketReq2为空,因此SUM(c.TICKETREQ1+b.TicketReq2)应遇到错误。请在其他求和和和计数函数中尝试ISNULL(b.TicketReq2,0)和类似的更改。谢谢,效果非常好。我只是假设它会将null视为0I,我只需要将ISNULL添加到sum函数中。计数函数不需要ISNULL,在这种情况下,我将添加一个正式答案。希望您能回来并将其标记为正确答案。当您同时使用GROUP BY时,永远不要使用“select distinct”,上面所有查询中的“distinct”是完全多余的。删除“distinct”,当GROUP BY保证唯一性时,它是无用的