2017-07-18 10 views
0

異なる条件を処理しますパラメータの量は、3つのカーソルをどのように組み合わせて1つにするのがベストでしょうか?私は必要なデータの種類を示すために、別のcp_tran_typeを渡すことができます。以下ダイナミックカーソルは、私は、3つの異なるカーソルがわずか3つの異なる条件を処理するために作成した

例:

CURSOR c_credit(cp_object_id VARCHAR2, cp_date DATE, cp_tran_type VARCHAR2) IS 
SELECT nvl(SUM(qty), 0) qty 
FROM x 
WHERE object_id = cp_object_id 
AND **daytime = cp_date** 
AND text_1 = cp_tran_type; 

CURSOR c_cum_credit(cp_lifting_account_id VARCHAR2, cp_date DATE, cp_tran_type VARCHAR2) IS 
SELECT nvl(SUM(adj_qty2), 0) adj_qty 
FROM x 
WHERE object_id = cp_object_id 
AND **daytime <= cp_date** 
AND text_1 = cp_tran_type; 

CURSOR c_net_credit(cp_lifting_account_id VARCHAR2, cp_date DATE, cp_tran_type VARCHAR2) IS 
SELECT nvl(SUM(adj_qty2), 0) adj_qty 
FROM x 
WHERE object_id = cp_object_id 
AND daytime <= cp_date 
AND **(text_1 = 'A' OR text_1 = 'B');** 

ありがとうございます!

答えて

0
SELECT NVL (
      SUM (
       CASE 
        WHEN daytime = cp_date 
        AND text_1 = cp_tran_type 
        THEN 
         qty 
        ELSE 
         0 
       END 
      ) 
     , 0 
     ) 
      qty 
    , NVL (
      SUM (
       CASE 
        WHEN daytime <= cp_date 
        AND text_1 = cp_tran_type 
        THEN 
         adj_qty2 
        ELSE 
         0 
       END 
      ) 
     , 0 
     ) 
      adj_qty 
    , NVL (
      SUM (
       CASE 
        WHEN daytime <= cp_date 
        AND (text_1 = 'A' 
         OR text_1 = 'B') 
        THEN 
         adj_qty2 
        ELSE 
         0 
       END 
      ) 
     , 0 
     ) 
      adj_qty 
    FROM x 
WHERE object_id = cp_object_id; 
関連する問題