Tsql T-SQL中的条件并集
目前我有一个查询,如下所示:Tsql T-SQL中的条件并集,tsql,sql-server-2008,Tsql,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
-- 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返回的金额小于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 */
您可以将第一个查询的结果存储到一个临时表中,然后,如果该表不是空的,则执行另一个查询
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 */
只是一个观察:coalesclamt,0 AS amt列似乎是多余的,因为coalesclamt,00条件。只是一个观察:coalesclamt,0 AS amt列似乎是多余的,因为coalesclamt,00条件。好吧,需求有一点变化,查询本身也有一点变化。但是你的ans对我还是有帮助的。嗯,需求有了一点变化,查询本身也有了变化。但是你的ans对我还是有帮助的。