【问题标题】:when 2 output values are returned it should display the hardcorded one and if 1 output value is returned it should display the 1output itself当返回 2 个输出值时,它应该显示硬线输出值,如果返回 1 个输出值,它应该显示 1 个输出本身
【发布时间】:2017-09-11 13:42:30
【问题描述】:

当我对输入参数ABC 执行查询时,它返回两个值(Partner, Smith);每当返回这两个值中的两个值时,Smith 将是一个强制值,该值将被返回。

但每当输入参数为'xyz' 执行相同的查询时,它只返回一个值。

现在我的要求是,每当我执行查询时,如果它返回这两个值中的两个值,那么只有 SMITH 必须在输出中返回,如果相同的查询返回一个输出值,那么它应该显示 loutput 值本身。

以下查询满足我的要求的第一部分,但它不满足我的要求的第二部分。只要输出值数量为 1,它就会返回“Null”值,而不是显示 1output 值。

SELECT R.REGION_GID 
FROM GTM_TRANSACTION T, 
     GTM_TRANSACTION_INVOLVED_PARTY P,
     CONTACT C, 
     LOCATION L,
     REGION_DETAIL R 
WHERE T.GTM_TRANSACTION_GID=P.GTM_TRANSACTION_GID 
AND R.COUNTRY_CODE3_GID = L.COUNTRY_CODE3_GID 
AND R.REGION_GID LIKE 'SSN/BP.GTM_COMPL%' 
AND L.LOCATION_GID = C.LOCATION_GID 
AND P.INVOLVED_PARTY_CONTACT_GID=C.CONTACT_GID
AND P.INVOLVED_PARTY_QUAL_GID='SHIP_FROM' 
AND T.GTM_TRANSACTION_GID=$SHIP_FORM 

INTERSECT

SELECT R.REGION_GID 
FROM GTM_TRANSACTION T,
     GTM_TRANSACTION_INVOLVED_PARTY P,
     CONTACT C,
     LOCATION L,
     REGION_DETAIL R 
    WHERE T.GTM_TRANSACTION_GID=P.GTM_TRANSACTION_GID
     AND R.COUNTRY_CODE3_GID = L.COUNTRY_CODE3_GID
      AND R.REGION_GID ='SSN/BP.GTM_COMPL_NO_CODING' 
    AND L.LOCATION_GID = C.LOCATION_GID  
    AND P.INVOLVED_PARTY_CONTACT_GID=C.CONTACT_GID 
    AND P.INVOLVED_PARTY_QUAL_GID='SHIP_FROM'
      AND T.GTM_TRANSACTION_GID=$SHIP_FROM

【问题讨论】:

  • 那么这个过程中的'SMITH'是什么?

标签: sql oracle set-operations


【解决方案1】:

据我所知,INTERSECT 的两半之间的唯一区别在于P.REGION_GID 的过滤器。上半场有:

R.REGION_GID LIKE 'SSN/BP.GTM_COMPL%'

第二个有

R.REGION_GID = 'SSN/BP.GTM_COMPL_NO_CODING'

鉴于INTERSECT 的工作方式,我认为这意味着前半部分是多余的。那么唯一的问题是下半场是返回一排还是两排。您希望它始终返回一行,“SMITH”优先。以下逻辑可能是您想要的(作为奖励,我也整理了您的 JOIN):

SELECT TOP 1
    R.REGION_GID
FROM
    GTM_TRANSACTION T
    JOIN GTM_TRANSACTION_INVOLVED_PARTY P ON
        T.GTM_TRANSACTION_GID=P.GTM_TRANSACTION_GID
    JOIN CONTACT C ON
        P.INVOLVED_PARTY_CONTACT_GID=C.CONTACT_GID
    JOIN LOCATION L ON
        L.LOCATION_GID = C.LOCATION_GID 
    JOIN REGION_DETAIL R ON
        R.COUNTRY_CODE3_GID = L.COUNTRY_CODE3_GID 
WHERE
    R.REGION_GID ='SSN/BP.GTM_COMPL_NO_CODING'
    AND P.INVOLVED_PARTY_QUAL_GID='SHIP_FROM'
    AND T.GTM_TRANSACTION_GID=$SHIP_FROM
ORDER BY
    CASE WHEN R.REGION_GID = 'SMITH' then 1 else 2 end

最后一行应该是这样的:CASE WHEN R.REGION_GID = 'SMITH' then 1 else 2 end,但我没有告诉我们太多关于你的数据的信息,所以我真的不知道。

【讨论】:

  • 不太清楚我的第一个版本发生了什么......在我发布之前我一定在本地版本中丢失了一些编辑并且没有注意到。这里整理好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-17
  • 1970-01-01
  • 2020-12-22
  • 1970-01-01
  • 2015-07-09
相关资源
最近更新 更多