有一个生成报告的复杂查询。该查询有几个子查询,可为不同产品生成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