man*_*yee 0 t-sql sql-server-2008
目前我的查询如下:
-- 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
Run Code Online (Sandbox Code Playgroud)
除了acc_type = '5'
在查询2中,查询2 与查询1相同.查询2始终返回具有单行的结果集.现在,我需要两个查询的联合,即
Query 1
UNION
Query 2
Run Code Online (Sandbox Code Playgroud)
只有当查询2返回的amt小于0时.否则,我不需要联合,只需要查询1中的结果集.
我能想到的最好方法是创建一个参数化标量函数.我怎么能这样做?
您可以将第一个查询的结果存储到临时表中,然后,如果表不为空,则执行另一个查询.
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 */
Run Code Online (Sandbox Code Playgroud)