-1

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

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

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

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

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
4

1 回答 1

0

据我所知,您的两半之间的唯一区别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但我你没有告诉我们太多关于你的数据的信息,所以我真的不知道。

于 2017-04-15T13:41:50.797 回答