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

MS SQL Server Discussion :

Affichage d'une colonne d'une ligne précédente


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2003
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 85
    Par défaut Affichage d'une colonne d'une ligne précédente
    [SQL2005] Affichage d'une colonne d'une ligne précédente
    Bonjour,
    Je m'explique. J'ai un générateur d'édition pas très évolué et dans l'édition de ma facture (avec regroupement de BL) je veux ajouter une bande de sous total quand je change de Bon de livraison. Dans mon générateur d état je ne peux pas crée de variable qui enregistre une colonne d’une ligne précédente.
    L’éditeur source de donnée SQL est assez limité. Je suis obligé de passer par une vue. Ca je sais faire.
    Mais pour la requête je ne sais pas comment faire ?

    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
     
    WITH LIGNE(NUM,LIG,CODE,LIB,NAT)AS
    (
      SELECT 1000, 1, '', 'LIVRAISON CLIENT N° 1 DU 05/01/2010','FAC' UNION ALL
      SELECT 1000, 2, '', 'COMMANDE CLIENT N° 113 DU 05/01/2010','FAC' UNION ALL
      SELECT 1000, 3, '100484', 'CABLE Ø5MM 19X7 AME METAL. ANTIGIR. GALVA GR.','FAC' UNION ALL
      SELECT 1000, 4, '100483', 'CABLE Ø4MM 19X7 AME METAL. ANTIGIR. GALVA GR.','FAC' UNION ALL
      SELECT 1000, 5, '105505', 'SERRE CABLE ETRIER MI-DUR Ø 5MM DIN741TALON LISSE GALVA','FAC' UNION ALL
      SELECT 1001, 1, '' , 'LIVRAISON CLIENT N° 5 DU 06/01/2010' ,'FAC' UNION ALL
      SELECT 1001, 2, '' , 'COMMANDE CLIENT N° 47 DU 24/12/2009','FAC' UNION ALL
      SELECT 1001, 3, '105505', 'SERRE CABLE ETRIER MI-DUR Ø 5MM DIN741TALON LISSE GALVA','FAC' UNION ALL
      SELECT 1002, 1, '' , 'DEVIS CLIENT N° 12 DU 23/12/2009  ','FAC' UNION ALL
      SELECT 1002, 2, '106670', 'MANILLE LYRE MI-DUR CMU 0T4 LEVAGE AFNOR J33344','FAC' UNION ALL
      SELECT 1002, 3, '106671', 'MANILLE LYRE MI-DUR CMU 0T63 LEVAGE AFNOR J33344','FAC'
    )
    SELECT NUM,LIG,CODE,LIB FROM LIGNE WHERE NAT='FAC' ORDER BY NUM, LIG
    Le résultat :
    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
     
     
     
    NUM	LIG	CODE	LIB
    1000	1		LIVRAISON CLIENT n° 1 du 05/01/2010
    1000	2		COMMANDE CLIENT n° 113 du 05/01/2010
    1000	3	100484	CABLE Ø5MM 19X7 AME METAL. ANTIGIR. GALVA GR.
    1000	4	100483	CABLE Ø4MM 19X7 AME METAL. ANTIGIR. GALVA GR.
    1000	5	105505	SERRE CABLE ETRIER MI-DUR Ø 5MM DIN741TALON LISSE GALVA
    1001	1		LIVRAISON CLIENT n° 5 du 06/01/2010
    1001	2		COMMANDE CLIENT n° 47 du 24/12/2009
    1001	3	105505	SERRE CABLE ETRIER MI-DUR Ø 5MM DIN741TALON LISSE GALVA
    1002	1		DEVIS CLIENT n° 12 du 23/12/2009  
    1002	2	106670	MANILLE LYRE MI-DUR CMU 0T4 LEVAGE AFNOR J33344
    1002	3	106671	MANILLE LYRE MI-DUR CMU 0T63 LEVAGE AFNOR J33344
    Résultat souhaité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    NUM	LIG	CODE	PRE_CDE	LIB
    1000	1			LIVRAISON CLIENT n° 1 du 05/01/2010
    1000	2		1000	COMMANDE CLIENT n° 113 du 05/01/2010
    1000	3	100484	1000	CABLE Ø5MM 19X7 AME METAL. ANTIGIR. GALVA GR.
    1000	4	100483	1000	CABLE Ø4MM 19X7 AME METAL. ANTIGIR. GALVA GR.
    1000	5	105505	1000	SERRE CABLE ETRIER MI-DUR Ø 5MM DIN741TALON LISSE GALVA
    1001	1		1000	LIVRAISON CLIENT n° 5 du 06/01/2010
    1001	2		1001	COMMANDE CLIENT n° 47 du 24/12/2009
    1001	3	105505	1001	SERRE CABLE ETRIER MI-DUR Ø 5MM DIN741TALON LISSE GALVA
    1002	1		1001	DEVIS CLIENT n° 12 du 23/12/2009  
    1002	2	106670	1002	MANILLE LYRE MI-DUR CMU 0T4 LEVAGE AFNOR J33344
    1002	3	106671	1002	MANILLE LYRE MI-DUR CMU 0T63 LEVAGE AFNOR J33344
    La colonne PRE_CDE est la colonne NUM de la LIGNE précédente.

    Merci pour vos réponses.

    Cordialement.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 010
    Billets dans le blog
    6
    Par défaut
    Dans une base de données relationnelle il n'y a pas d'ordre des lignes dans les tables.... donc, pas de précédent, ni suivant.
    Commencez par définir l'ordre que vous souhaitez.... et puisque vous voulez retourner une seule valeur, il faut que cet ordonnancement soit unique !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre confirmé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2003
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 85
    Par défaut
    Bonsoir,
    Je me suis peut-être mal fait comprendre. J'ai une requête qui est trié, et je voulais savoir s'il est possible d'afficher le contenu d'une colonne d'une ligne précédente voir exemple dans le début de la discussion.

    Merci.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 010
    Billets dans le blog
    6
    Par défaut
    Réponse brute non, car il n'y a pas d'ordre dans les bases de données relationnelle. Lisez l'article que j'ai écrit à ce sujet : http://blog.developpez.com/sqlpro/p5...sont-des-ense/
    Donc la notion d'avant, après ou précédent au niveau des lignes n'existe pas.

    Cependant il est possible de faire référence à une valeur avant ou après, mais une valeur ce n'est pas une ligne, et la valeur peut ne pas être unique.

    D'ou la question de départ à laquelle vous n'avez toujours pas répondu :
    Commencez par définir l'ordre que vous souhaitez....

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    D'ou la question de départ à laquelle vous n'avez toujours pas répondu :
    Commencez par définir l'ordre que vous souhaitez....
    Visiblement, c'est ordonné par numero, puis par ligne. On peut supposer que le couple est unique...

    par contre je ne vois pas trop l'interet de faire une telle chose... Quelles sont les contraintes imposées par votre "générateur d'édition" qui vous obligent a procéder ainsi ? Quel est l'interet de recuperer le numero de la ligne du "dessus" ? est-ce que votre "générateur d'édition" ne sait traiter qu'une ligne a la fois, et c'est ainsi une façon de "detecter" un changement de numéro ?

    dans ce cas, ce cas, regardez cette requete, a adapter a vos besoin (j'ai ajouté une colonne montant, car avec ceci, vous pouvez même calculer les sous totaux)

    Code sql : 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
     
    WITH LIGNE(NUM,LIG,CODE,LIB,NAT, MONTANT)AS
    (
      SELECT 1000, 1, '', 'LIVRAISON CLIENT N° 1 DU 05/01/2010','FAC', 2 UNION ALL
      SELECT 1000, 2, '', 'COMMANDE CLIENT N° 113 DU 05/01/2010','FAC', 3 UNION ALL
      SELECT 1000, 3, '100484', 'CABLE Ø5MM 19X7 AME METAL. ANTIGIR. GALVA GR.','FAC', 10 UNION ALL
      SELECT 1000, 4, '100483', 'CABLE Ø4MM 19X7 AME METAL. ANTIGIR. GALVA GR.','FAC', 12 UNION ALL
      SELECT 1000, 5, '105505', 'SERRE CABLE ETRIER MI-DUR Ø 5MM DIN741TALON LISSE GALVA','FAC', 3 UNION ALL
      SELECT 1001, 1, '' , 'LIVRAISON CLIENT N° 5 DU 06/01/2010' ,'FAC',4 UNION ALL
      SELECT 1001, 2, '' , 'COMMANDE CLIENT N° 47 DU 24/12/2009','FAC',4 UNION ALL
      SELECT 1001, 3, '105505', 'SERRE CABLE ETRIER MI-DUR Ø 5MM DIN741TALON LISSE GALVA','FAC', 4 UNION ALL
      SELECT 1002, 1, '' , 'DEVIS CLIENT N° 12 DU 23/12/2009  ','FAC', 5 UNION ALL
      SELECT 1002, 2, '106670', 'MANILLE LYRE MI-DUR CMU 0T4 LEVAGE AFNOR J33344','FAC', 6 UNION ALL
      SELECT 1002, 3, '106671', 'MANILLE LYRE MI-DUR CMU 0T63 LEVAGE AFNOR J33344','FAC', 23
    )
    SELECT NUM,LIG,CODE,LIB, MONTANT
    FROM LIGNE 
    WHERE NAT='FAC' 
    UNION ALL
    SELECT NUM, MAX(LIG) + 1, NULL, 'SOUS Total', SUM(MONTANT)
    FROM LIGNE 
    WHERE NAT='FAC' 
    GROUP BY NUM
    ORDER BY NUM, LIG

  6. #6
    Membre confirmé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2003
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 85
    Par défaut
    Bonjour
    D’abord merci pour vos réponses.

    Envoyé par SQLpro
    Cependant il est possible de faire référence à une valeur avant ou après, mais une valeur ce n'est pas une ligne, et la valeur peut ne pas être unique.

    D'ou la question de départ à laquelle vous n'avez toujours pas répondu :
    Commencez par définir l'ordre que vous souhaitez....
    Le tri est : c'est ordonné par numéro, puis par ligne

    Par contre je ne vois pas trop l'intérêt de faire une telle chose... Quelles sont les contraintes imposées par votre "générateur d'édition" qui vous obligent à procéder ainsi ? Quel est l'intérêt de récupérer le numéro de la ligne du "dessus" ? Est-ce que votre "générateur d'édition" ne sait traiter qu'une ligne à la fois, et c'est ainsi une façon de "détecter" un changement de numéro ?
    Je ne voyais pas le résultat comme ca mais ca peut être une solution. Dans mon générateur d’état. Je prépare une facture. Il y a un regroupement de BL. Pour chaque BL, je veux avoir un sous total.
    Dans l’exemple fourni je n’ai mis qu’une partie de la requête. Avec cette solution je traite cette enregistrement dans une bande particulière. Dans mon générateur d’état de CEGID, je n’ai pas la possibilité de créer un champ valeur auquel j’affecte une valeur chaque fois que je traite une ligne. Mais c’est mois qui choisit l’affectation. Dans d’autre générateur d’état comme R&R je pouvais enregistrer des valeurs du record précédent issue de ma source de donné (en fonction de mon tri). CE qui me permet comme en programmation de tester si ma ligne de facture issue de mon BL fait bien partit de mon BL ou si c’est un nouveau BL.

    Exemple voir l’image jointe

    Merci.
    Images attachées Images attachées  

Discussions similaires

  1. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  2. [WD16] Récupérer la valeur d'une colonne d'une table d'une ligne précise
    Par elghers_hocine dans le forum WinDev
    Réponses: 16
    Dernier message: 06/05/2011, 18h11
  3. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  4. Réponses: 1
    Dernier message: 21/01/2011, 10h17
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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