2017-09-26 41 views
-1

下面的SQL代码向我介绍了我的客户以及他们在2015年12月所做的订单。我想用UNION来完成此任务。SQL:如何使用Union和2种不同类型的数据

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合并,交叉或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 

不给我订单每个客户的计数。

+1

MySQL或SQL Server,它RDBMS使用的是? – Sami

+0

**为什么**你想用'UNION'做到这一点?你在寻找什么样的产出? (请提供样本数据和预期输出) – HoneyBadger

+0

我不认为你需要一个工会,但是一个左连接。 – Peter

回答

0

你可以用OUTER APPLY做到这一点:

select k.klantnr, k.naam, orders.cnt as 'aantal bestellingen' 
    from klant k 
    outer apply (
        select count(*) 
         from bestelling 
         where klantnr = k.klantnr 
         and Year(besteldatum) = 2015 
         and Month(besteldatum) = 12 
       ) as orders(cnt); 
0

你希望所有的客户和订单的指定月份的数字?

您可以使用outer apply作为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 
0

如果你真的需要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 
相关问题