Une requête complexe génère un rapport. La requête comporte plusieurs sous-requêtes qui génèrent une table à trois colonnes pour différents produits. Chaque sous-requête renvoie une ligne. Toutes les lignes retournées doivent ensuite être réunies. Mais il y a une exigence. S'il n'y a pas de lignes de résultats pour une sous-requête, nous devons quand même inclure le produit correspondant dans le rapport final, mais spécifiez que Trades_Count est égal à zéro.Utilisation de variables dans le script Oracle
Je peux y parvenir en utilisant un ensemble de variables. Le code suivant fonctionnera parfaitement dans 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)
)
Je pense que je ne l'ai pas utilisé quoi que ce soit T-SQL spécifique, mais pur ANSI-SQL (je ne suis pas sûr à 100% si).
Il s'agit donc de ne fonctionnant pas dans Oracle. Tout d'abord, il ne nécessite qu'un seul mot-clé DECLARE. Ensuite, cela me force à utiliser Begin ... Fin de la portée de l'exécution. Ensuite, il ne me permet pas d'assigner des variables comme je le fais (voir l'exemple ci-dessus) - J'ai besoin d'utiliser l'instruction "Select INTO" à la place. Une fois tous les calculs effectués, il ne me permet pas de sélectionner des valeurs à partir de variables locales. Zut.
Est-ce que quelqu'un sait comment le faire fonctionner dans Oracle?
Merci!
Merci beaucoup. il est très inspite complexe, ça marche! :) –