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 :

Soustraire deux requêtes


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    automatisme et réseau
    Inscrit en
    Février 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : automatisme et réseau
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2014
    Messages : 25
    Par défaut Soustraire deux requêtes
    Bonjour,

    Je vous rend compte de mon problème:

    J'ai ces deux requêtes:

    requête 1 :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT VarValue FROM
    (SELECT ROW_NUMBER()
    	OVER (ORDER BY TimeString DESC) AS ROW, TimeString, VarName, VarValue
    	FROM L1_HH0
    	WHERE VarName
    	LIKE '%Cu%') AS EMP
    WHERE ROW = 1

    requête 2 :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT VarValue FROM
    (SELECT ROW_NUMBER()
    	OVER (ORDER BY TimeString DESC) AS ROW, TimeString, VarName, VarValue
    	FROM L1_HH0
    	WHERE VarName
    	LIKE '%Bonn%') AS EMP
    WHERE ROW = 1

    Et je suis incapable de réussir à les soustraire, j'ai essayé avec plusieurs méthode sans succès.

    Merci d'avance pour votre aide

    Cordialement

  2. #2
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut qu'on me corrige si je dis des bêtises
    Que veux-tu dire par soustraire ???

    Il faut bien se mettre en tête que travailler avec des requêtes SQL, c'est travailler avec des ensembles.

    On peut bien sûr "soustraire" un ensemble A d'un ensemble B. On a alors tout les éléments qui appartiennent à B et qui n'appartiennent pas à A.

    Il y a plusieurs manière d'arriver à cela suivant les cas :

    1. Il y a l'opérateur IN associer à la négation (NOT IN donc)
    2. Il y a l'opérateur EXISTS également associé à la négation (NOT EXISTS donc)
    3. Il y a l'opérateur EXCEPT (pour info, sa négation est INTERSECT).


    Je vous laisse juger de ce qui convient le mieux à votre cas.

  3. #3
    Membre averti
    Homme Profil pro
    automatisme et réseau
    Inscrit en
    Février 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : automatisme et réseau
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2014
    Messages : 25
    Par défaut
    ma première requête me donne 3500
    et la deuxième 3000

    J'aimerai simplement que ma requête donne:

    VarValue requête 1 - VarValuerequête 2 = Quantité actu


    Est ce plus clair?

  4. #4
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Par défaut
    En gros, ce que tu veux faire c'est:
    • prendre la dernière valeur VarValue pour laquelle VarName LIKE '%Cu%' (V1)
    • prendre la dernière valeur VarValue pour laquelle VarName LIKE '%Bonn%' (V2)
    • Soustraire V1-V2 (Quantité Actuelle)


    C'est ça ou il y a d'autres contraintes ? (du genre : faire cela pour un ensemble de produits avec un PARTITION BY; devoir tout faire en une seule requête, sans variable temporaire...)

    Autre considération : dans les deux requêtes, la condition est de la forme "VarName LIKE '%...' ". Ce genre de requête est lente (SQL Server est obligé de faire un scan car il ne peut pas utiliser d'index). Ça peut être une bonne idée (si possible) de faire une seule requête (un seul scan) pour faire un premier tri et retourner à la fois les enregistrements correspondant à l'une ou l'autre de ces conditions (on les séparera par la suite).

    Mais là, ça dépend encore des contraintes imposées (d'où ma question précédente).
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  5. #5
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Bizarre
    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 COALESCE((SELECT VarValue FROM
    (SELECT ROW_NUMBER()
    	OVER (ORDER BY TimeString DESC) AS ROW, TimeString, VarName, VarValue
    	FROM L1_HH0
    	WHERE VarName
    	LIKE '%Cu%') AS EMP
    WHERE ROW = 1),0) -
    COALESCE (SELECT VarValue FROM
    (SELECT ROW_NUMBER()
    	OVER (ORDER BY TimeString DESC) AS ROW, TimeString, VarName, VarValue
    	FROM L1_HH0
    	WHERE VarName
    	LIKE '%Bonn%') AS EMP
    WHERE ROW = 1),0)

Discussions similaires

  1. [2008] Soustraire les résultats de deux requêtes
    Par demerius dans le forum Développement
    Réponses: 2
    Dernier message: 04/11/2014, 16h11
  2. Réponses: 9
    Dernier message: 08/11/2005, 09h55
  3. [SQL] Comment soustraire deux dates
    Par raj dans le forum Oracle
    Réponses: 2
    Dernier message: 12/10/2005, 12h40
  4. Réponses: 1
    Dernier message: 28/06/2005, 09h15
  5. soustraire deux dates ?
    Par joejoe dans le forum SQL
    Réponses: 2
    Dernier message: 19/07/2002, 15h53

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