[英]SQL - Select statement inside case
當其他表中的某些字段不為空時,我想從表中選擇特定的列。
換句話說,我有兩個表,它們具有公共字段,因此當表1中名為“ salesordrkey”的字段不為null時,我需要從表2中獲取公共字段,否則從表1中獲取公共字段
這就是我想要做的
Select slsordr.salesordrkey,
whissue.warehissuekey,
issuppk.issueprodpackkey,
(Case When whissue.salesordrkey Is Not Null Then
(Select slsordr.busipartnerkey,
slsordr.contractkey,
slsordr.salesmankey,
slsordr.customerkey)
Else
(Select whissue.busipartnerkey,
whissue.contractkey,
whissue.salesmankey,
slsordr.customerkey)
End)
From warehissues whissue
Inner Join issueprodpacks issuppk on whissue.warehissuekey = issuppk.warehissuekey
Left Join slssalesordrs slsordr on whissue.salesordrkey = slsordr.salesordrkey
Where
whissue.partitionkey = @prtnkey and
issuppk.prodpackkey = @prodpackkey
但這沒有用..還有其他方法可以實現嗎?
我假設您的邏輯是倒退的。 代替:
case when whissue.salesordrkey is not null . . .
我認為您打算:
case when slsordr.salesordrkey is not null
第一個不檢查left join
是否正常工作。
因此,您可以使用coalesce()
:
select slsordr.salesordrkey, whissue.warehissuekey, issuppk.issueprodpackkey,
coalesce(slsordr.busipartnerkey, whissue.busipartnerkey) as busipartnerkey,
coalesce(slsordr.contractkey, whissue.contractkey) as contractkey,
coalesce(slsordr.salesmankey, whissue.salesmankey),
coalesce(slsordr.customerkey, whissue.customerkey)
from warehissues whissue inner join
issueprodpacks issuppk
on whissue.warehissuekey = issuppk.warehissuekey left join
slssalesordrs slsordr
on whissue.salesordrkey = slsordr.salesordrkey
where whissue.partitionkey = @prtnkey and
issuppk.prodpackkey = @prodpackkey
我應該注意,這並不是100%完全相同的邏輯。 某些具有匹配項的記錄在slsordr
表中可能具有NULL
值。 即使有匹配項,使用coalesce()
也會從另一個表中獲取值。 但是,這通常是邏輯。
否則,您需要使用多個case
語句:
(case when slsorderkey is not null then slsordr.busipartnerkey
else whissue.busipartnerkey
end) as busipartnerkey,
case
是一種表達。 它僅返回一個值,而不返回多個值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.