2017-04-15 61 views
-1

當我對輸入參數ABC執行查詢時,它返回兩個值(Partner, Smith);只要這兩個值的兩個值返回,Smith將是一個將被返回的強制值。當2個輸出值被返回時,它應該顯示hardcorded之一,如果返回1個輸出值,它應該顯示1output本身

但是,只要輸入參數爲'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 
+0

那麼在這個過程中'SMITH'是什麼? – APC

回答

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,但我還沒有告訴我們很多關於你的數據,所以我真的不知道。

+0

不太確定我的第一個版本發生了什麼......在我發佈它之前,我必須在本地版本中丟失一些修改,但未能注意到。這裏整理好了。 –

相關問題