将两个记录集连接成一个结果,包括 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
我有如下 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