IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Besoin d'aide pour une requête


Sujet :

Développement SQL Server

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2012
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Décembre 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Besoin d'aide pour une requête
    Je précise que je débute en MS-SQL. Voici mon problème:

    J'ai deux tables:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    actifs
    actif_id	portf_id	prod_id	date_deb	val_tot
    1		1		1		2013-04-15	100.000
    2		1		1		2013-04-16	200.000
    3		2		1		2013-04-14	150.000
    4		1		2		2013-04-15	100.000
    5		2		3		2013-04-20	120.000
    6		1		3		2013-04-30	100.000
     
    transac_hist
     
    transac_id	actif_id	date_trans		trans_mnt
    1		1		2013-05-15		-1000
    2		2		2013-05-15		-2000
    3		3		2013-05-15		 3000
    4		1		2013-05-30		-1000
    5		2		2013-05-30		-1500
    6		3		2013-05-30		-1000
    7		1		2013-06-15		-6000
    8		2		2013-06-15		 5000
    9		3		2013-06-15		-1000
    10		4		2013-06-20		-1000
    Je dois obtenir la valeur totale d'un portefeuille donné (une ligne par actif) à une date donnée (à savoir en ajoutant le cumul des transactions à la valeur totale pour un produit donné, ces montants, s'ils existent pouvant être positifs ou négatifs).

    Si:

    - aucune transaction n'existe dans transac_hist pour un actif donné ou
    - aucune transaction pour une date inférieure ou égale n'existe dans transac_hist pour un actif donné

    alors les lignes de(s) (l')actif(s) correspondants doivent être présentes dans le jeu de résultat mais afficher
    - 0 pour le montant de transaction
    - la valeur totale de l'actif d'origine pour le total en cours


    Le jeu de résultat doit se présenter ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    actif_id	prod_id 		date_deb	val_tot	montant transaction total en cours
    1		1			2013-04-15	100.000	-1000	99.000
    2		1			2013-04-16	200.000 -2000	198.000
    4		2			2013-04-15	100.000 0		100.000
    6		3			2013-04-30	100.000 0		100.000
    Le SELECT suivant donne les actifs pour lesquels aucune transaction n'existe mais - et pour cause - pas ceux dont les transactions ont une date supérieure (et donc n'entrent pas dans les critères du select.)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    SELECT 
    a.actif_id,
    a.prod_id,
    a.date_deb,
    a.val_tot,
    sum(coalesce(th.trans_mnt,0)) as 'montant transaction',
    (a.val_tot + sum(coalesce(th.trans_mnt,0))) as 'total en cours'
    FROM actifs a
    LEFT OUTER JOIN transac_hist th
    ON a.actif_id = th.actif_id
    WHERE a.portf_id = 1
    AND coalesce(th.date_trans, a.date_deb) <= '2013-05-15'
    GROUP BY a.actif_id, a.prod_id, a.date_deb, a.val_tot
    ORDER BY a.actif_id
    Par contre le select suivant me donne le résultat escompté mais je suis persuadé qu'il y a plus simple comme solution, aussi vos lumières sont les bienvenues. Vraiment, merci d'avance:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    SELECT 
    a.actif_id,
    a.prod_id,
    a.date_deb,
    a.val_tot as 'total en cours'
    FROM actifs a
    LEFT OUTER JOIN transac_hist th
    ON a.actif_id = th.actif_id
    WHERE a.portf_id = 1
    AND a.actif_id NOT IN
    (SELECT a.actif_id
    FROM actifs a
    INNER JOIN transac_hist th
    ON a.actif_id = th.actif_id
    WHERE a.portf_id = 1
    AND at.trans_date <= '2012-05-15')
    GROUP BY a.actif_id, a.prod_id, a.date_deb, a.val_tot
    UNION
    SELECT 
    a.actif_id,
    a.prod_id,
    (a.val_tot  + sum(th.trans_mnt,0)) as 'outstanding_amount'
    FROM asset a
    INNER JOIN transac_hist th
    ON a.actif_id = th.actif_id
    WHERE a.portf_id = 1
    AND coalesce(th.date_trans, a.date_deb) <= '2013-05-15'
    GROUP BY a.actif_id, a.prod_id, a.date_deb, a.val_tot

  2. #2
    Membre actif
    Avatar de SQL_EVAN
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2011
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 161
    Points : 245
    Points
    245
    Par défaut
    C'est difficile à cerner votre question. Pouvez-vous fournier le DDL de vos deux tables et un jeu de données.

    Ensuite on pourra essayer de vous dépanner en fonction des besoins.

    Merci
    "Toute technologie suffisamment avancée est indiscernable de la magie." - Arthur C. Clarke

    Evan Barke - Ingénieur d'Etudes et Développement SQL Server
    Blog SQL Server, T-SQL, SSIS, Administration www.transactivesql.com
    Twitter - TransactiveSQL
    N'oubliez pas les boutons et

Discussions similaires

  1. Besoin d'aide pour une requête de MAJ (modif. de car.)
    Par ptitscrat dans le forum Access
    Réponses: 5
    Dernier message: 22/03/2006, 17h27
  2. besoin d'aide pour une requête
    Par lipao17 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/01/2006, 16h55
  3. Besoin d'aide pour une requête SQL
    Par Borami dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/11/2005, 10h33
  4. Besoin d'aide pour une Requête SQL ...
    Par Kokito dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/07/2004, 11h56
  5. besoin d'aide pour une requête
    Par Damien69 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 31/03/2004, 15h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo