Join 将两个记录集合并为一个结果,包括空值

Join 将两个记录集合并为一个结果,包括空值,join,sql-server-2012,group-by,null,Join,Sql Server 2012,Group By,Null,我有如下sql脚本: select a.Program,a.COUNTS_OPEN,b.COUNTS_CLOSE from (select Program, count(ISNULL(Program,'UNKNOWN')) COUNTS_OPEN from table_a WHERE (SUBMITDATE > CONVERT(datetime, '2014-08-31 23:59:59.000') and SUBMITDATE < CONVERT(datetime, '2014-

我有如下sql脚本:

select a.Program,a.COUNTS_OPEN,b.COUNTS_CLOSE
from 
(select Program, count(ISNULL(Program,'UNKNOWN')) COUNTS_OPEN
from table_a
WHERE (SUBMITDATE > CONVERT(datetime, '2014-08-31 23:59:59.000') and SUBMITDATE < CONVERT(datetime, '2014-10-01 00:00:00.000') ) 
group by Program) as a 

full JOIN

(
select Program,count(ISNULL(Program,'UNKNOWN')) COUNTS_CLOSE 
from table_a
WHERE  (STATUS='Closed' and UPDATEDATE > CONVERT(datetime, '2014-08-31 23:59:59.000') and UPDATEDATE < CONVERT(datetime, '2014-10-01 00:00:00.000') ) 
group by Program) as b
on a.Program= b.Program
我需要一行,而不是两行NULL,如下所示:

  Program   COUNTS_OPEN COUNTS_CLOSE
    NULL        18            8
    ProgramA    253           205
    ProgramB    2              2
    ProgramC    123            109

无法理解如何正确连接。

在不知道表结构的情况下,这是一个猜测,但我认为使用条件聚合的查询应该可以实现您想要的:

SELECT 
    Program, -- replace with ISNULL(Program,'UNKNOWN'), if you want UNKNOWN instead of NULL
    COUNTS_OPEN   = SUM(case when (SUBMITDATE > CONVERT(datetime, '2014-08-31 23:59:59.000') and SUBMITDATE < CONVERT(datetime, '2014-10-01 00:00:00.000') ) then 1 else 0 end), 
    COUNTS_CLOSED = SUM(case when (STATUS='Closed' and UPDATEDATE > CONVERT(datetime, '2014-08-31 23:59:59.000') and UPDATEDATE < CONVERT(datetime, '2014-10-01 00:00:00.000') ) then 1 else 0 end) 
FROM table_a
GROUP BY program

当我按convertnvarchar10,SUBMITDATE,112分组并使用convertnvarchar10,SUBMITDATE,112作为日期而不是程序时,计数\u CLOSED未正确计数。因为我知道像20140901这样的特定日期没有关闭记录,但结果是2个关闭项目。你知道吗?@Tayir对不起,我不太明白你的问题。无论如何,如果您有后续问题,最好将其作为新问题发布,这样比我更多的人可以看到并帮助您。谢谢您的提醒。我在这里提出了一个新问题:
SELECT 
    Program, -- replace with ISNULL(Program,'UNKNOWN'), if you want UNKNOWN instead of NULL
    COUNTS_OPEN   = SUM(case when (SUBMITDATE > CONVERT(datetime, '2014-08-31 23:59:59.000') and SUBMITDATE < CONVERT(datetime, '2014-10-01 00:00:00.000') ) then 1 else 0 end), 
    COUNTS_CLOSED = SUM(case when (STATUS='Closed' and UPDATEDATE > CONVERT(datetime, '2014-08-31 23:59:59.000') and UPDATEDATE < CONVERT(datetime, '2014-10-01 00:00:00.000') ) then 1 else 0 end) 
FROM table_a
GROUP BY program