Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/10/2011, 12h11   #1
Invité régulier
 
Homme
Etudiant en alternance
Inscription : octobre 2011
Messages : 10
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 : 10
Points : 6
Points : 6
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 :
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
Type de fichier : png volume.png (8,5 Ko, 7 affichages)
blivatz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2011, 15h56   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Avec une autojointure :
Code :
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
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/10/2011, 16h21   #3
SLE
Membre chevronné
 
Avatar de SLE
 
Homme Serge LESPAGNARD
Consultant informatique
Inscription : janvier 2004
Messages : 588
Détails du profil
Informations personnelles :
Nom : Homme Serge LESPAGNARD
Âge : 38
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : janvier 2004
Messages : 588
Points : 732
Points : 732
Si les id de la table ne se suivent pas exactement avec un pas de 1, ça ne fonctionnera pas.
SLE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2011, 16h29   #4
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 724
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 724
Points : 6 848
Points : 6 848
Dans ce cas il faudra simplement numéroter les lignes temporairement via ROW_NUMBER() par exemple.

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/10/2011, 16h30   #5
Invité régulier
 
Homme
Etudiant en alternance
Inscription : octobre 2011
Messages : 10
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 : 10
Points : 6
Points : 6
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.
blivatz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2011, 16h54   #6
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Avec SQL-Server 2011 ce sera plus simple, et il les id n'auront pas à être consécutifs, juste dans le bon ordre :
Code :
1
2
3
SELECT id_date, idex
     , idex - lag(idex, 1, idex) over(ORDER BY id_date ASC) AS volume
  FROM MaTable
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 07/10/2011, 20h30   #7
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 724
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 724
Points : 6 848
Points : 6 848
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

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h15.


 
 
 
 
Partenaires

Hébergement Web