2011-06-02 5 views
0

次のように現在、私は、クエリをしました:条件・ユニオンT-SQLで

-- Query 1 
SELECT 
    acc_code, acc_name, alias, LAmt, coalesce(LAmt,0) AS amt 
FROM 
    (SELECT 
     acc_code, acc_name, alias, 
     (SELECT 
      (SUM(cr_amt)-SUM(dr_amt)) 
     FROM 
      ledger_mcg l 
     WHERE 
      (l.acc_code LIKE a.acc_code + '.%' OR l.acc_code=a.acc_code) 
     AND 
      fy_id=1 
     AND 
      posted_date BETWEEN '2010-01-01' AND '2011-06-02') AS LAmt 
    FROM 
     acc_head_mcg AS a 
    WHERE 
    (acc_type='4')) AS T1 
WHERE 
    coalesce(LAmt,0)<>0 

クエリ2 2.クエリ2は、常に単一の行でResultSetを返すクエリでそのacc_type = '5'を除き、クエリ1と同じです。今、私は2つのクエリの労働組合を必要とするクエリ2で返さAMTはそうで0未満である場合にのみ、

Query 1 
UNION 
Query 2 

、すなわち、私は労働組合を必要としますが、クエリ1.

からのみresulsetはありません

私が考えることができる最良の方法は、パラメータ化されたスカラ関数を作成することです。どのように私はこれを行うことができます最高の?

+0

「合体(LAmt、0)AS amt」列は、「合体(LAmt、0)<0>」条件のために冗長であるように見えます。 –

答えて

5

最初のクエリの結果を一時テーブルに格納し、テーブルが空でない場合は、別のクエリを実行できます。

IF OBJECT_ID('tempdb..#MultipleQueriesResults') IS NOT NULL 
    DROP TABLE #MultipleQueriesResults; 

SELECT 
    acc_code, acc_name, alias, LAmt, coalesce(LAmt,0) AS amt 
INTO #MultipleQueriesResults 
FROM 
    (SELECT 
     acc_code, acc_name, alias, 
     (SELECT 
      (SUM(cr_amt)-SUM(dr_amt)) 
     FROM 
      ledger_mcg l 
     WHERE 
      (l.acc_code LIKE a.acc_code + '.%' OR l.acc_code=a.acc_code) 
     AND 
      fy_id=1 
     AND 
      posted_date BETWEEN '2010-01-01' AND '2011-06-02') AS LAmt 
    FROM 
     acc_head_mcg AS a 
    WHERE 
    (acc_type='4')) AS T1 
WHERE 
    coalesce(LAmt,0)<>0; 

IF NOT EXISTS (SELECT * FROM #MultipleQueriesResults) 
    … /* run Query 2 */ 
+0

要件にわずかな変更があったため、クエリ自体も変わっていました。しかしあなたのansは私にとってまだ役立つ。 – mannyee

関連する問題