有一個生成報告的複雜查詢。該查詢有幾個子查詢,可爲不同產品生成3列表。每個子查詢返回一行。所有返回的行然後需要聯合。 但有一個要求。如果子查詢沒有結果行,我們需要將相應的產品包含到最終報告中,但是指定Trades_Count等於零。在Oracle腳本中使用變量
我可以使用一組變量來實現這一點。下面的代碼將在MS SQL Server中很好地工作:
DECLARE @PRODUCT_NAME_1 nvarchar(100);
DECLARE @OFFER_VALID_DATE_1 datetime;
DECLARE @TRADES_COUNT_1 int;
DECLARE @PRODUCT_NAME_2 nvarchar(100);
DECLARE @OFFER_VALID_DATE_2 datetime;
DECLARE @TRADES_COUNT_2 int;
--Product 1
select @PRODUCT_NAME_1 = PRODUCT_NAME, @OFFER_VALID_DATE_1 = MAX(EXPIRY_DATE), @TRADES_COUNT_1 = COUNT(DEAL_NUMBER)
from (
--Data extractions with several joins goes here....
) as TempTable1
GROUP BY PRODUCT_NAME
--Product 2
select @PRODUCT_NAME_2 = PRODUCT_NAME, @OFFER_VALID_DATE_2 = MAX(EXPIRY_DATE), @TRADES_COUNT_2 = COUNT(DEAL_NUMBER)
from (
--Data extractions with several joins goes here....
) as TempTable2
GROUP BY PRODUCT_NAME
SELECT ISNULL(@PRODUCT_NAME_1,'Product 1') AS PRODUCT_NAME, @OFFER_VALID_DATE_1 AS MAX_MATURITY, ISNULL(@TRADES_COUNT_1,0)
UNION
(
SELECT ISNULL(@PRODUCT_NAME_2,'Product 2') AS PRODUCT_NAME, @OFFER_VALID_DATE_2 AS MAX_MATURITY, ISNULL(@TRADES_COUNT_2,0)
)
我認爲我沒有使用任何T-SQL特有的,但是純粹的ANSI-SQL(我不是100%肯定,雖然)。
因此這是在Oracle中不能正常工作。
首先它只需要一個DECLARE關鍵字。然後它強制我使用Begin ... End execution scope。然後它不允許我像我一樣分配變量(請參見上面的示例) - 我需要使用「Select INTO」語句。完成所有計算後,它不允許我從局部變量中選擇值。哎呀。
有誰知道如何使它在Oracle中工作?
謝謝!
非常感謝你。Inspite它是非常複雜的,它的工程!:) – 2011-02-18 14:22:51