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

SQL Oracle Discussion :

Différence 2 lignes par 2


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 481
    Par défaut Différence 2 lignes par 2
    j'ai besoin de sommer les lignes de ma table de la manière suivant

    DATE --- REF --- MONTANT --- INDICE --- TOTAL_IND_1 --- TOTAL_IND_2 --- DIFF

    avec INDICE in (1,2)

    pour chaque REF j'ai besoin besoin de faire la différence : DIFF = (MONTANT where INDICE = 1 ) - (MONTANT where INDICE = 2) et mettre le résultant dans la ligne courante ( pratiquement je dois avoir des 0 pour la majorité des lignes)

    d'un autre lieu j'ai besoin de retourner la 1ere date ou DIFF <> 0

    merci pour vos collaborations

  2. #2
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonjour,

    Une idée qui me passe par la tête serait de faire un LAG sur montant (surement partition by ref), pour les lignes ayant indice = 2.
    Comme ca, tu peux faire ton opération sur les montants.

    @+


    PS: sinon, je crains que tu doives préparer qq données de tests, et les poster, etc ...

  3. #3
    Membre Expert
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Par défaut
    Il y a plusieurs solutions, tu pourrais faire des sous-requêtes pour obtenir le montant par REF du cumul de l'indice 1 et le cumul de l'indice 2.

    Une solution pour faire le cumul en une seule requête (A adapter pour ton contexte)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT REF, Total_IND1, Total_IND2, 
      Total_IND1 - Total_IND2 AS Diff
    FROM
      (SELECT REF, 
        SUM(DECODE(IND,1,MONTANT,0)) AS Total_IND1, 
        SUM(DECODE(IND,2,MONTANT,0)) AS Total_IND2, 
      FROM MaTable
      WHERE IND IN (1,2)
      GROUP BY REF
      );

  4. #4
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 481
    Par défaut
    Citation Envoyé par Scriuiw Voir le message
    Il y a plusieurs solutions, tu pourrais faire des sous-requêtes pour obtenir le montant par REF du cumul de l'indice 1 et le cumul de l'indice 2.

    Une solution pour faire le cumul en une seule requête (A adapter pour ton contexte)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT REF, Total_IND1, Total_IND2, 
      Total_IND1 - Total_IND2 AS Diff
    FROM
      (SELECT REF, 
        SUM(DECODE(IND,1,MONTANT,0)) AS Total_IND1, 
        SUM(DECODE(IND,2,MONTANT,0)) AS Total_IND2, 
      FROM MaTable
      WHERE IND IN (1,2)
      GROUP BY REF
      );
    c'est juste mais ici je dois récupérer la date ou la différence est <> 0, donc tant que la différence = 0 je continue

  5. #5
    Membre Expert
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Par défaut
    Je ne comprend pas l'exemple, pourquoi faut-il afficher 28/06/2017 ?

  6. #6
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 481
    Par défaut
    Citation Envoyé par Scriuiw Voir le message
    Je ne comprend pas l'exemple, pourquoi faut-il afficher 28/06/2017 ?
    parceque mes lignes marche deux - à deux, donc chaque Ligne avec INDICE = 1 pour le même montant elle doit retrouver la même ligne pour INDICE = 2 ce qui fait lorsque on somme on obtient = 0

    dans le cas ou on trouvera pas d'INDICE 2 juste après 1 pour le même montant on doit récupérer la date de cette ligne

  7. #7
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 481
    Par défaut
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    DATE	  MONTANT	INDICE	REF	TOTAL_IND_1	TOTAL_IND_2	
    28/09/2014	1470,03	1	6001858	-1470,03	0	0	
    07/10/2014	1470,03	2	6001858	0	1470,03	0	
    29/03/2015	2000	1	6001858	-2000	0	0	
    21/04/2015	2000	2	6001858	0	2000	0	
    28/03/2017	5000	1	6001858	-5000	0	0	
    12/04/2017	5000	2	6001858	0	5000	0	
    28/06/2017	5000	1	6001858	-5000	0	0	  ----- JE DOIS AFFICHER '28/06/2017'
    28/09/2017	5000	1	6001858	-5000	0	0	
    28/12/2017	5000	1	6001858	-5000	0	0	
    28/03/2018	5000	1	6001858	-5000	0	0	
    22/05/2018	5000	2	6001858	0	5000	0
     
     
    29/12/2013	1694,63	1	6001859	-1694,63	0	0	
    13/01/2014	1694,63	2	6001859	0	1694,63	0	
    28/09/2014	2000	1	6001859	-2000	0	0	
    07/10/2014	2000	2	6001859	0	2000	0	
    28/12/2014	1171,09	1	6001859	-1171,09	0	0	
    01/02/2015	1171,09	2	6001859	0	1171,09	0	
    29/03/2015	2000	1	6001859	-2000	0	0	
    21/04/2015	2000	2	6001859	0	2000	0	
    28/03/2017	5000	1	6001859	-5000	0	0	
    12/04/2017	5000	2	6001859	0	5000	0	
    28/06/2017	5000	1	6001859	-5000	0	0		-- IDEM 28/06/2017	
    28/09/2017	5000	1	6001859	-5000	0	0	
    28/12/2017	5000	1	6001859	-5000	0	0	
    28/03/2018	5000	1	6001859	-5000	0	0	
    22/05/2018	2475,09	2	6001859	0	2475,09	0
     
     
     
    16/04/2012	4612,69	1	6001942	-4612,69	0	0	
    30/04/2012	4612,69	2	6001942	0	4612,69	0	
    16/01/2013	1981,29	1	6001942	-1981,29	0	0	
    27/01/2013	1981,29	2	6001942	0	1981,29	0	
    16/07/2014	2316,88	1	6001942	-2316,88	0	0	
    27/07/2014	2316,88	2	6001942	0	2316,88	0	
    18/01/2015	4612,69	1	6001942	-4612,69	0	0	
    01/02/2015	4612,69	2	6001942	0	4612,69	0	
    16/04/2015	4612,69	1	6001942	-4612,69	0	0	
    21/04/2015	4612,69	2	6001942	0	4612,69	0	
    16/07/2017	5000	1	6001942	-5000	0	0		----  je dois afficher  16/07/2017	
    16/10/2017	5000	1	6001942	-5000	0	0	
    16/01/2018	5000	1	6001942	-5000	0	0	
    16/04/2018	5000	1	6001942	-5000	0	0	
    16/07/2018	5000	1	6001942	-5000	0	0	
    16/10/2018	5000	1	6001942	-5000	0	0	
    16/01/2019	5000	1	6001942	-5000	0	0

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Détection par bloc et différence ligne par ligne
    Par peter_k dans le forum OpenCV
    Réponses: 1
    Dernier message: 23/04/2013, 11h24
  2. Parcourir un Db_GRID ligne par ligne
    Par sanosuke dans le forum Bases de données
    Réponses: 8
    Dernier message: 12/05/2008, 12h14
  3. aditionner les champs d'une table ligne par ligne
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/08/2005, 08h38
  4. remplacer des sauts de ligne par '\n'
    Par Miksimus dans le forum Général Python
    Réponses: 5
    Dernier message: 18/07/2005, 10h01

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