2014-02-11 90 views
0

我有2個查詢並且調用了一個函數2次我只需要根據msg_sys_no count和msg_trans_type調用函數一次。 請找到下面提到的查詢,併爲我提供合併爲單一的解決方案。將多個查詢合併爲單個查詢

SELECT COUNT(DISTINCT b1.msg_sys_no) INTO A 
    FROM tra_message b1 
    WHERE TO_CHAR(b1.msg_when_created,'YYYY-MM-DD') = in_start_date 
    AND b1.msg_service_provider     = in_svc_provider 
    AND b1.msg_trans_type = 'TRADE1' 
    AND get_transaction_status_func(b1.msg_sys_no, b1.msg_trans_type) = 'S'; 

SELECT COUNT(DISTINCT b1.msg_sys_no) INTO B 
    FROM tra_message b1 
    WHERE TO_CHAR(b1.msg_when_created,'YYYY-MM-DD') = in_start_date 
    AND b1.msg_service_provider     = in_svc_provider 
    AND b1.msg_trans_type = 'TRADE2' 
    AND get_transaction_status_func(b1.msg_sys_no, b1.msg_trans_type) = 'S'; 
+0

SELECT COUNT(DISTINCT b1.msg_sys_no)TRADE1, COUNT(DISTINCT b1.msg_sys_no)TRADE2 分爲A,B FROM tra_message B1 WHERE TO_CHAR(B1。 msg_when_created, 'YYYY-MM-DD')= in_start_date AND b1.msg_service_provider in_svc_provider = AND IN b1.msg_trans_type( 'TRADE1', 'TRADE2') AND get_transaction_status_func(b1.msg_sys_no,b1.msg_trans_type)= 'S' ; – user3266456

+0

但它給出了錯誤的數字,你能否給我提供我出錯的細節? – user3266456

回答

0

大約是這樣的內容:

WITH tra_data 
    AS (SELECT * 
      FROM tra_message 
      WHERE TO_CHAR (msg_when_created, 'YYYY-MM-DD') = in_start_date 
       AND msg_service_provider = in_svc_provider 
       AND get_transaction_status_func (msg_sys_no, msg_trans_type) = 
         'S') 
SELECT COUNT (*) 
    FROM tra_data 
WHERE msg_trans_type = 'TRADE1' 
UNION 
SELECT COUNT (*) 
    FROM tra_data 
WHERE msg_trans_type = 'TRADE2' 
+0

我們如何計算msg_sys_no並將數據存儲到A,B out參數中。 – user3266456

0

的問題是,您和IN b1.msg_trans_type( 'TRADE1', 'TRADE2')的條件。

嘗試是這樣的:

select COUNT(DISTINCT a) TRADE1, 
     COUNT(DISTINCT b) TRADE2 
into A,B 
from (
select case when b1.msg_trans_type = 'TRADE1' 
      then b1.msg_sys_no 
      else null end as a, 
     case when b1.msg_trans_type = 'TRADE2' 
      then b1.msg_sys_no 
      else null end as b 
FROM tra_message b1 
WHERE TO_CHAR(b1.msg_when_created,'YYYY-MM-DD') = in_start_date 
AND b1.msg_service_provider = in_svc_provider 
AND b1.msg_trans_type IN ('TRADE1','TRADE2') 
AND get_transaction_status_func(b1.msg_sys_no, b1.msg_trans_type) = 'S' 
); 
+0

嗨,感謝您的解釋,但我們需要在此代碼中提供b1.msg_sys_no ..請澄清...以及case when b1.msg_trans_type ='TRADE1' 然後b1.msg_trans_type這裏有什麼價值...請解釋 – user3266456

+0

IN子句的問題在於,您應將count(distinct)應用於與TRADE1或TRADE2值相匹配的每條記錄。所以我認爲你的計數都會得到同樣的價值。我的案例命令的目的是區分哪個記錄滿足第一個條件,哪個滿足第二個條件。因此,「a」列顯示了您只希望計算TRADE1的值; TRADE2的相同技術。最後,您可以正確計算兩個不同的值。我已更新我的SQL語句以獲取您需要的MSG_SYS_NO數量... –

+0

感謝您的解釋 – user3266456