将两个记录集连接成一个结果,包括 NULL 值

Joining two record sets into one result including NULL values

我有如下 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,但我希望有一行 NULL,因为它是按程序分组的。这是结果集:

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

我需要一行,而不是两行 NULL:

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

不知道如何正确加入。

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

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