簡體   English   中英

SQL-大小寫選擇語句

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM