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 :

Soustraction de deux champs d'une même colonne


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Octobre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Etudiant en alternance
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 17
    Points : 18
    Points
    18
    Par défaut Soustraction de deux champs d'une même colonne
    Bonjour,

    je souhaite faire une requête qui soustrait deux champs d'une même colonne
    je débute dans le domaine et après quelques heures de recherche et de réflexion je me retrouve bloqué.

    Voici ma requête:
    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
    declare @index1 as int
    declare @index2 as int
    declare @index0 as int
    set @index0 = 0
    set @index1 = 0
    set @index2 = 1
     
    WHILE @index1 < 31
    	begin 
    		select idex - (select idex from mensuel where Id_dates =@index2)as volume
    		from mensuel where Id_dates = Id_dates+@index0
    		set @index0 = @index0 + 1
    		set @index1 = @index1 + 1
    		set @index2 = @index2 + 1
    		if(select idex from mensuel where (Id_dates = 1+@index1)) > 31
    			break
    		else
    			continue
    	end
    Entouré en rouge le résultat que je voudrai obtenir.
    Images attachées Images attachées  

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Avec une autojointure :
    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
    ;With MaTable (id_date, idex) as
    (
    select 1, 7891792 union all
    select 2, 7891913 union all
    select 3, 7891992 union all
    select 4, 7895442 union all
    select 5, 7898099
    )
    select mt1.id_date, mt1.idex
         , mt1.idex - coalesce(mt2.idex, mt1.idex) as volume
      from MaTable as mt1
           left outer join MaTable as mt2
             on mt2.id_date = mt1.id_date - 1
     
    id_date     idex        volume
    ----------- ----------- -----------
    1           7891792     0
    2           7891913     121
    3           7891992     79
    4           7895442     3450
    5           7898099     2657

  3. #3
    SLE
    SLE est déconnecté
    Membre éclairé Avatar de SLE
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 604
    Points : 799
    Points
    799
    Par défaut
    Si les id de la table ne se suivent pas exactement avec un pas de 1, ça ne fonctionnera pas.

  4. #4
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Dans ce cas il faudra simplement numéroter les lignes temporairement via ROW_NUMBER() par exemple.

    ++

  5. #5
    Membre à l'essai
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Octobre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Etudiant en alternance
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 17
    Points : 18
    Points
    18
    Par défaut
    Merci pour l'aide Waldar je vois que j'ai beaucoup de progrès à faire
    En ce qui concerne les id la BDD est faite de façon à ce que les id se suivent.

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Avec SQL-Server 2011 ce sera plus simple, et il les id n'auront pas à être consécutifs, juste dans le bon ordre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id_date, idex
         , idex - lag(idex, 1, idex) over(order by id_date asc) as volume
      FROM MaTable

  7. #7
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Avec SQL-Server 2011 ce sera plus simple, et il les id n'auront pas à être consécutifs, juste dans le bon ordre :
    Juste pour être râleur ca ne sera pas une version 2011 mais une version 2012

    ++

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

Discussions similaires

  1. filtrer deux valeurs d'une même colonne
    Par esojrehcir dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/05/2009, 13h22
  2. Grouper deux champs d'une même table
    Par Bridou dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/04/2009, 11h18
  3. [MySQL] Permutation de deux valeurs dans une même colonne de table
    Par andry.aime dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 16/01/2009, 14h19
  4. [MySQL] Jointure: Avec deux champs d'une même table
    Par Vinuto dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/11/2008, 21h10
  5. Jointure entre deux champs d'une même table
    Par oubli dans le forum Requêtes
    Réponses: 8
    Dernier message: 11/12/2007, 17h20

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