SQL 尝试融合 2 查询



我有这个 2 个查询

select  CONVERT(date, en_cours.date),COUNT(*) encours from en_cours  group by  CONVERT(date, en_cours.date) order by CONVERT(date, en_cours.date) asc
select  CONVERT(date, clos.date),COUNT(*) clos from clos  group by  CONVERT(date, clos.date) order by CONVERT(date, clos.date) asc

第一个返回:

B|1
C|1
F|20

第二个:

A|4
B|8
C|7
D|1
E|9
F|10

我正在尝试融合这个 2 查询并使其像:

A|4|NULL
B|8|1
C|7|1
D|1|NULL
E|9|NULL
F|10|20

但是当我这样做时,它被赋予了不同的值

select  CONVERT(date, clos.date),COUNT(clos.ticket_cp),COUNT(en_cours.ticket_cp)from clos left join en_cours on CONVERT(date, clos.date) = CONVERT(date, en_cours.date)   group by  CONVERT(date, clos.date) order by CONVERT(date, clos.date) asc

将每个查询包装在 CTE 中并联接它们:

with 
cte1 as (
select CONVERT(date, en_cours.date) date1, COUNT(*) encours 
from en_cours  
group by CONVERT(date, en_cours.date) 
)  
cte2 as (
select CONVERT(date, clos.date) date2, COUNT(*) clos 
from clos  
group by CONVERT(date, clos.date) 
)
select c1.date1, c1.encours, c2.clos
from cte1 c1 left join cte2 c2 
on c2.date2 = c1.date1
order by c1.date1 asc 

如果第二个查询可能包含第一个查询中不存在的日期,请将LEFT JOIN更改为FULL OUTER JOIN

使用直接数据库调用的方案有点脆弱,因为如果您有任何数据库更改,则必须等待存储中的发布时间才能更改查询。 但对于您的方案,请尝试包含 System.Data 以与 sql 命令集成。

最新更新