簡體   English   中英

使用或邏輯的SQL列參數綁定變量

[英]SQL Column Parameter Bind Variable with either or logic

如果標題誤導我,我深表歉意。

我試圖避免使用兩個不同的查詢。 考慮到這一點,

我有以下示例查詢

  SELECT COUNT (*) COUNT,
         SUM (AMT) AS DED_AMT,
         SUM (SURCOST),
         SUM (DEALSUM),
         NVL (TO_CHAR (SUM (RETAIL)), 'N/A') AS RETAIL,
         MNFCID
    FROM (SELECT B.ID, B.CD, A.*
            FROM OUTPUTS_A A JOIN OUTPUTS_B B ON A.ID = B.ID
           WHERE B.ID = :ID AND B.CD = UPPER (:CD))
GROUP BY ID;

返回的結果可以在第一個屏幕截圖中看到。 在此處輸入圖片說明

注意,我在查詢中傳遞了兩個綁定變量:ID,:CD。 他們必須走在一起,這就是為什么我在那里使用AND運算符的原因。

有時,我只有MFCID,而沒有:ID和:CD。

這就是我正在考慮的邏輯。

  1. 我想以某種方式修改查詢,以便能夠將MFCID作為綁定變量進行傳遞。 假設:mfcid是我要傳遞的變量。

  2. 如果方便使用:ID和:CD的值,則將傳遞這些值,而對於:mfcid不傳遞任何值。 (從某種意義上說,我什么都不會通過。此字段不能為空)

  3. 如果僅提供:mfcid的值,則將傳遞該值,而對:ID和:CD不傳遞任何值。 (從某種意義上說,我什么都不會通過。此字段不能為空)

無論哪種方式,它都應該返回相同的結果。

我試過這樣寫: AND B.MNFCID = NVL(:MNFCID, B.MNFCID)但它要花很多時間,因為如果不傳遞任何東西,它總是正確的。

這是您想要的嗎?

SELECT COUNT(*) COUNT, SUM(AMT) AS DED_AMT, SUM(SURCOST),
       SUM(DEALSUM), NVL(TO_CHAR(SUM(RETAIL)), 'N/A') AS RETAIL,
       MNFCID
FROM OUTPUTS_A A JOIN
     OUTPUTS_B B 
     ON A.ID = B.ID
WHERE (B.ID = :ID OR :ID IS NULL) AND
      (B.CD = UPPER(:CD) OR :CD IS NULL)
GROUP BY B.ID;

如果這行不通(也可能行不通),則可能要使用動態SQL,以便可以更輕松地使用適當的索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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