2017-09-26 75 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 
相關問題