Mysql SQL:如何对两种不同类型的数据使用Union with count

Mysql SQL:如何对两种不同类型的数据使用Union with count,mysql,sql-server,algorithm,Mysql,Sql Server,Algorithm,下面的SQL代码概述了我的客户以及他们在2015年12月完成的订单。我想和工会一起做这件事 select k.klantnr, k.naam, count(b.bestelnr) as 'aantal bestellingen' from klant k LEFT JOIN bestelling b on k.klantnr = b.klantnr and Year (b.besteldatum) = 2015 and Month(b.besteldatum) = 12 group by k

下面的SQL代码概述了我的客户以及他们在2015年12月完成的订单。我想和工会一起做这件事

select k.klantnr, k.naam, count(b.bestelnr) as 'aantal bestellingen'
 from klant k LEFT JOIN bestelling b on k.klantnr = b.klantnr and Year (b.besteldatum) = 2015 and Month(b.besteldatum) = 12
 group by k.klantnr, k.naam
我已经试过了:

select klantnr from klant
union
select klantnr, count(*) from bestelling
where Year(besteldatum) = 2015 and Month(besteldatum) = 12
group by klantnr
显然不起作用,给我这个错误:所有使用UNION、INTERSECT或EXCEPT运算符组合的查询在其目标列表中必须有相同数量的表达式

当我在谷歌上搜索时,我找到了下一个查询:

select tem.klantnr, count(*) 
from(select klantnr from klant
union
select klantnr from bestelling where Year(besteldatum) = 2015 and Month(besteldatum) = 12) as tem
group by klantnr
没有提供每位客户的订单数量。

您可以通过以下方式完成此操作:


您想要指定月份的所有客户和订单数量吗

您可以使用Ruslan建议的外部应用或左连接

select k.klantnr,coalesce(count(b.klantnr),0) as 'aantal bestellingen'
from klant k
left join bestelling b on k.klantnr = b.klantnr and Year(besteldatum) = 2015 and Month(besteldatum) = 12)
group by klantnr

如果您确实需要UNION,并且可以处理输出,下面是一些SQLi样式的查询:D

select klantnr, null from klant union
select klantnr, count(*) from bestelling
    where Year(besteldatum) = 2015
    and Month(besteldatum) = 12 group by klantnr

MySQL或SQL Server,您使用的是哪种RDBMS?为什么要使用
UNION
?你想要什么样的产出?(请提供示例数据和预期输出)我认为您不需要联合,而是需要左联合。
select klantnr, null from klant union
select klantnr, count(*) from bestelling
    where Year(besteldatum) = 2015
    and Month(besteldatum) = 12 group by klantnr