[英]How to implement left outer join?
我有這個查詢我想實現左外部聯接我該怎么做
SELECT A.cl_id, A.cl_name, A.number_of_orders, B.Dispatch
FROM (
SELECT CL_Clients.cl_id, CL_Clients.cl_name,COUNT(*) AS number_of_orders
FROM CL_Clients,CLOI_ClientOrderItems
WHERE CL_Clients.cl_id = CLOI_ClientOrderItems.cl_id
GROUP BY CL_Clients.cl_name,CL_Clients.cl_id
) A
, (
SELECT CL_Clients.cl_id,count(*) AS Dispatch
FROM CLOI_ClientOrderItems,CL_Clients
WHERE cloi_current_status = '12'
AND CL_Clients.cl_id = CLOI_ClientOrderItems.cl_id
GROUP BY CL_Clients.cl_name,CL_Clients.cl_id, CLOI_ClientOrderItems.cloi_current_status
) B
WHERE A.cl_id = B.cl_id
預期產量
Cl_id | Cl_name |Builtorder |Dispatch
------------------------------------------------
admin |admin 1 |0 |20
agar |Agar Murdoch |102 |1
Alexander|Alexander James|33 |65
alexandra|Alexandra West |64 |14
Archer |Archer & Co |0 |5
asbank |Stirling |80 |8
asnapebr |Andrew Snape |183 |1
asnapech |Andrew Snape Ch|213 |0
我認為您的完整查詢可以用很少的幾行寫,請嘗試下面的代碼。
第一種方式,單聯接就是全部!
Select a.cl_id
,a.cl_name
,count(b.cl_id) as number_of_orders
,Sum(Case When b.cloi_current_status ='12'
--and Condition1 and condition2
Then 1 else 0 end) as Dispatch
from CL_Clients as a
left join CLOI_ClientOrderItems as b on a.cl_id = b.cl_id
group by a.cl_id
,a.cl_name
第二種方式,多個聯接
Select a.cl_id
,a.cl_name
,Isnull(orderTable.orders,0) as number_of_orders
,ISNULL(dTable.Dispatch,0) as Dispatch
from CL_Clients as a
outer apply
(
select b.cl_id,count(b.cl_id) as orders from CLOI_ClientOrderItems as b
where a.cl_id = b.cl_id
group by b.cl_id
)as orderTable
outer apply
(
select d.cl_id,count(*) as Dispatch from CLOI_ClientOrderItems as d
where a.cl_id = d.cl_id
and d.cloi_current_status ='12'
--and condition2
--and condition3
--..............
--and condition250
group by a.cl_id
)as dTable
在上面的語句中,使用first join作為orderTable
來獲取訂單數。 作為dTableis
第二個dTableis
用於獲取已調度的訂單數,它可以包含您所要求的多個條件, -----Condition2 .....
是虛擬文本,您可以刪除所有注釋,例如Condition2,Condition3
..並提出您的實際情況。
這是您在TSQL中的處理方式,但是@ AK47具有解決您較大問題的解決方案。
SELECT A.cl_id, A.cl_name, A.number_of_orders, B.Dispatch
FROM (
SELECT CL_Clients.cl_id, CL_Clients.cl_name,COUNT(*) AS number_of_orders
FROM CL_Clients,CLOI_ClientOrderItems
WHERE CL_Clients.cl_id = CLOI_ClientOrderItems.cl_id
GROUP BY CL_Clients.cl_name,CL_Clients.cl_id
) A
LEFT OUTER JOIN (
SELECT CL_Clients.cl_id,count(*) AS Dispatch
FROM CLOI_ClientOrderItems,CL_Clients
WHERE cloi_current_status = '12'
AND CL_Clients.cl_id = CLOI_ClientOrderItems.cl_id
GROUP BY CL_Clients.cl_name,CL_Clients.cl_id, CLOI_ClientOrderItems.cloi_current_status
) B
ON A.cl_id = B.cl_id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.