レポートを生成する複雑なクエリがあります。クエリには、さまざまな製品の3列のテーブルを生成するいくつかのサブクエリがあります。各サブクエリは1行を返します。次に、返されたすべての行を結合する必要があります。ただし、要件が1つあります。サブクエリの結果行がない場合は、とにかく対応する商品を最終レポートに含める必要がありますが、Trades_Countがゼロに等しいことを指定します。
これは、変数のセットを使用して実現できます。次のコードは、MSSQLServerで完全に機能します。
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キーワードが1つだけ必要です。次に、Begin…End実行スコープを使用するように強制します。次に、私が行うように変数を割り当てることができません(上記の例を参照)–代わりに「SelectINTO」ステートメントを使用する必要があります。すべての計算が完了した後、ローカル変数から値を選択することはできません。ヘック。
Oracleで動作させる方法を知っている人はいますか?
ありがとう!