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 :

Update calcul dans une colonne petite probleme


Sujet :

MS SQL Server

  1. #1
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut Update calcul dans une colonne petite probleme
    Salut a tous! Et merci pour lire ma petite question! Je veux effecteur un calcul avec un update (dans la colonne CombustibilConsumat). La colonne CombustibilConsumat n'a pas des valeurs inserees initiellement avec INSERT INTO clause.

    J'ai une petite probleme dans la clause update.

    Je vous explique en detail le probleme:

    J'ai deux tables:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    CREATE TABLE TipuriAutomobile
    (IdTip int PRIMARY KEY NOT NULL,
    IdMasina int,
    TipAutomobil varchar(255),
    CapacitateMotor varchar(255),
    CapacitateTransport varchar(255),
    TipCombustibil varchar(255),
    NormaL100KM decimal(3,2) -- 3 zecimale in total , 2 zecimale dupa virgula
    )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM TipuriAutomobile
    Effet: (premiere photo attache)

    Chaque IdMasina(IdVoiture) a une norme de consomme du combustible (NormaL100KM) et la colonne TipAutomobil represent le type d'automobile. Donc chaque auto a une norme du consomme du combustible (colonne NormaL100KM).

    Puis la deuxieme table FoaieParcursMasina:

    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
     
    CREATE TABLE FoaieParcursMasina
    (IdFoaie int PRIMARY KEY NOT NULL,
    DataFoaieParcurs datetime,
    IdMasina int,
    NumarMasina varchar(255),
    DataOraPlecare datetime,
    DataOraSosire datetime,
    NumeSofer varchar(255),
    LocalitatePlecare varchar(255),
    LocalitateSosire varchar(255),
    KM int,
    CombustibilConsumat int, --combustibil consumat =km*normaL100km
    MotivDeplasare varchar(255),
    MarfaTransportata varchar(255),
    Utilizator varchar(255)
    )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM FoaieParcursMasina
    Effet: (Deuxieme photo attache).

    Ce que je veux c'est calculer est completer automatiquement la colonne CombustibilConsumat en rouge du table FoaieParcusMasina le calcul c'est NormaL100KM*KM (donc le produit des 2 colonnes) et completer automatiquement le resultat pour chaque type dans la colonne CombustibilConsumat selon les 4 consommes du combustibles (colonne NormaL100KM) *KM (nombre des KM parcours pour chaque type de voiture.

    J'ai essaye comme ca mais seulement les premiers 3 valeurs de la colonne CombustibilConsumat sont completes (je dois avoir 10 valeurs dans la colonne TipCombustibil selon IdTip(TypeVoiture) et IdMasina(IdVoiture)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    UPDATE FPM
    SET FPM.CombustibilConsumat = TPA.NormaL100KM * FPM.KM
    FROM
        dbo.FoaieParcursMasina AS FPM
        INNER JOIN dbo.TipuriAutomobile AS TPA
          ON TPA.IdMasina = FPM.IdMasina AND TPA.IdTip=FPM.IdTip
    Voila le contenu de tout mon fichier .sql: (pour etre plus precis)

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
     
    CREATE DATABASE ParcAuto
     
    CREATE TABLE TipuriAutomobile
    (IdTip int PRIMARY KEY NOT NULL,
    IdMasina int,
    TipAutomobil varchar(255),
    CapacitateMotor varchar(255),
    CapacitateTransport varchar(255),
    TipCombustibil varchar(255),
    NormaL100KM decimal(3,2) -- 3 zecimale in total , 2 zecimale dupa virgula
    )
     
    CREATE TABLE FoaieParcursMasina
    (IdFoaie int PRIMARY KEY NOT NULL,
    DataFoaieParcurs datetime,
    IdMasina int,
    NumarMasina varchar(255),
    DataOraPlecare datetime,
    DataOraSosire datetime,
    NumeSofer varchar(255),
    LocalitatePlecare varchar(255),
    LocalitateSosire varchar(255),
    KM int,
    CombustibilConsumat int, --combustibil consumat =km*normaL100km
    MotivDeplasare varchar(255),
    MarfaTransportata varchar(255),
    Utilizator varchar(255)
    )
     
    INSERT INTO TipuriAutomobile(IdTip,IdMasina,TipAutomobil,CapacitateMotor,CapacitateTransport,TipCombustibil,NormaL100KM)
    VALUES(1,1,'auto-cisterna','340kw','9000kg','motorina',8.93); 
     
    INSERT INTO TipuriAutomobile(IdTip,IdMasina,TipAutomobil,CapacitateMotor,CapacitateTransport,TipCombustibil,NormaL100KM)
    VALUES(2,2,'camion','320kw','7000kg','benzina',9.09); 
     
    INSERT INTO TipuriAutomobile(IdTip,IdMasina,TipAutomobil,CapacitateMotor,CapacitateTransport,TipCombustibil,NormaL100KM)
    VALUES(3,3,'auto-utilitara','300kw','8500kg','GPL',9.59); 
     
    INSERT INTO TipuriAutomobile(IdTip,IdMasina,TipAutomobil,CapacitateMotor,CapacitateTransport,TipCombustibil,NormaL100KM)
    VALUES(4,4,'basculanta','290kw','5500kg','benzina',8.83); 
     
     
    -- inserare inregistrari in tabela3
     
     
    -- Beneficiar este campul utilizator din tabela FoaieParcursMasina
     
    -- campul Combustibil consumat valori introduse prin calcul km*norma100km
     
    -- un sofer poate avea mai multe foi de parcurs intr-o luna
     
    --format datetime: an/luna/zi primele 2 cifre anul, urmatoarele 2 luna si 2 cifre zi
     
     
    INSERT INTO FoaieParcursMasina(IdFoaie,DataFoaieParcurs,IdMasina,NumarMasina,DataOraPlecare,DataOraSosire,NumeSofer,LocalitatePlecare,LocalitateSosire,KM,MotivDeplasare,MarfaTransportata,Utilizator)
    VALUES(001,'060207 ',1,'DB-20-RTS','020207 9:32:35','020207 11:20:32','Popescu George','Targoviste','Bucuresti',110,'transport marfa','ciment','Materiale Constructii Bucuresti ');
     
     
    INSERT INTO FoaieParcursMasina(IdFoaie,DataFoaieParcurs,IdMasina,NumarMasina,DataOraPlecare,DataOraSosire,NumeSofer,LocalitatePlecare,LocalitateSosire,KM,MotivDeplasare,MarfaTransportata,Utilizator)
    VALUES(002,'090407 ',2,'DB-20-RTS','040407 9:21:20','040407 11:51:42','Popescu George','Targoviste','Medgidia',140,'transport marfa','ciment','Cimentul Medgidia');
     
    INSERT INTO FoaieParcursMasina(IdFoaie,DataFoaieParcurs,IdMasina,NumarMasina,DataOraPlecare,DataOraSosire,NumeSofer,LocalitatePlecare,LocalitateSosire,KM,MotivDeplasare,MarfaTransportata,Utilizator)
    VALUES(003,'120807 ',3,'DB-02-SPR','040807 9:21:20','040807 11:51:42','Popescu Cosmin','Targoviste','Bucuresti',110,'transport marfa','fier beton','Materiale Constructii Bucuresti ');
     
    INSERT INTO FoaieParcursMasina(IdFoaie,DataFoaieParcurs,IdMasina,NumarMasina,DataOraPlecare,DataOraSosire,NumeSofer,LocalitatePlecare,LocalitateSosire,KM,MotivDeplasare,MarfaTransportata,Utilizator)
    VALUES(004,'130807 ',4,'DB-02-SPR','060807 9:21:20','060807 11:51:42','Georgescu Ionel','Targoviste','Bucuresti',110,'transport marfa','fier beton','Materiale Constructii Bucuresti ');
     
    INSERT INTO FoaieParcursMasina(IdFoaie,DataFoaieParcurs,IdMasina,NumarMasina,DataOraPlecare,DataOraSosire,NumeSofer,LocalitatePlecare,LocalitateSosire,KM,MotivDeplasare,MarfaTransportata,Utilizator)
    VALUES(005,'150807 ',5,'DB-02-SPR','070807 10:30:20','070807 12:51:42','Ionascu Paul','Targoviste','Bucuresti',110,'transport marfa','fier beton','Materiale Constructii Bucuresti ');
     
     
    INSERT INTO FoaieParcursMasina(IdFoaie,DataFoaieParcurs,IdMasina,NumarMasina,DataOraPlecare,DataOraSosire,NumeSofer,LocalitatePlecare,LocalitateSosire,KM,MotivDeplasare,MarfaTransportata,Utilizator)
    VALUES(006,'180807 ',6,'DB-03-STR','110807 10:30:20','110807 12:51:42','Ion Paul','Targoviste','Medgidia',140,'transport marfa','ciment','Cimentul Medgidia');
     
    INSERT INTO FoaieParcursMasina(IdFoaie,DataFoaieParcurs,IdMasina,NumarMasina,DataOraPlecare,DataOraSosire,NumeSofer,LocalitatePlecare,LocalitateSosire,KM,MotivDeplasare,MarfaTransportata,Utilizator)
    VALUES(007,'180807 ',7,'GL-08-FIT','130807 10:30:20','130807 12:51:42','Pricop George','Targoviste','Medgidia',140,'transport marfa','ciment','Cimentul Medgidia');
     
    INSERT INTO FoaieParcursMasina(IdFoaie,DataFoaieParcurs,IdMasina,NumarMasina,DataOraPlecare,DataOraSosire,NumeSofer,LocalitatePlecare,LocalitateSosire,KM,MotivDeplasare,MarfaTransportata,Utilizator)
    VALUES(008,'200807 ',8,'GL-08-FIT','140807 10:30:20','140807 12:51:42','Pricop Cristian','Targoviste','Medgidia',140,'transport marfa','ciment','Cimentul Medgidia');
     
     
    INSERT INTO FoaieParcursMasina(IdFoaie,DataFoaieParcurs,IdMasina,NumarMasina,DataOraPlecare,DataOraSosire,NumeSofer,LocalitatePlecare,LocalitateSosire,KM,MotivDeplasare,MarfaTransportata,Utilizator)
    VALUES(009,'250807 ',9,'GL-24-CAR','170807 10:30:20','170807 12:51:42','Enache Florin','Targoviste','Medgidia',140,'transport marfa','ciment','Cimentul Medgidia');
     
     
    INSERT INTO FoaieParcursMasina(IdFoaie,DataFoaieParcurs,IdMasina,NumarMasina,DataOraPlecare,DataOraSosire,NumeSofer,LocalitatePlecare,LocalitateSosire,KM,MotivDeplasare,MarfaTransportata,Utilizator)
    VALUES(010,'250807 ',10,'GL-24-CAR','170807 10:30:20','170807 12:51:42','Mihai Paul','Targoviste','Medgidia',140,'transport marfa','ciment','Cimentul Medgidia');
     
     
     
    INSERT INTO FoaieParcursMasina(IdFoaie,DataFoaieParcurs,IdMasina,NumarMasina,DataOraPlecare,DataOraSosire,NumeSofer,LocalitatePlecare,LocalitateSosire,KM,MotivDeplasare,MarfaTransportata,Utilizator)
    VALUES(011,'20070825',11,'GL-24-CAR','20070807 10:30:20','20070817 12:51:42','Mihai Paul','Targoviste','Medgidia',140,'transport marfa','ciment','Cimentul Medgidia');
     
     
    SELECT * FROM TipuriAutomobile
     
     
    SELECT * FROM FoaieParcursMasina
    -- completer automatiquement colonne CombustibilConsumat
    --par le calcul desire
     
    UPDATE FPM
    SET FPM.CombustibilConsumat = TPA.NormaL100KM * FPM.KM
    FROM
        dbo.FoaieParcursMasina AS FPM
        INNER JOIN dbo.TipuriAutomobile AS TPA
          ON TPA.IdMasina = FPM.IdMasina AND TPA.IdTip=FPM.IdTip
    Erreur UPDATE:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Msg 207, Level 16, State 1, Line 6
    Invalid column name 'IdTip'.
    Ca veut dire que je dois ajouter aussi la colonne avec les memes valeurs IdTip?

    Si j'ajoute la colonne IdTip dans FoaieParcursMasina je n'ai pas des erreurs mais il stoque seulement les premiers 3 resultats dans la colonne CombustibilConsumat.

    (j'ai besoin de 10 resultats) evidemment.

    C'est que je veux c'est faire le calcul selon chaque type d'automobile (j'ai 4 types d'automobiles et 4 normes du consomme du combustible -colonne NormaL100KM).

    Donc CombustibilConsumat=NormaL100KM (norme_combustible)*KM (nombre des KM parcourus)

    Dans la colonne TipCombustibil (j'ai le type du combustible utilise par la voiture - essence, diesel, GPL etc.)
    Images attachées Images attachées   

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Je ne comprend pas pourquoi tu as besoin de vérifier la condition suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND TPA.IdTip=FPM.IdTip
    dans ta jointure.

    Si j'ai bien compris ton modèle de données, tu peux enlever ce prédicat et écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE dbo.FoaieParcursMasina
    SET CombustibilConsumat = TPA.NormaL100KM * FPM.KM
    FROM dbo.FoaieParcursMasina AS FPM
    	INNER JOIN dbo.TipuriAutomobile AS TPA
    	ON TPA.IdMasina = FPM.IdMasina
    @++

  3. #3
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par elsuket Voir le message
    Bonjour,

    Je ne comprend pas pourquoi tu as besoin de vérifier la condition suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND TPA.IdTip=FPM.IdTip
    dans ta jointure.

    Si j'ai bien compris ton modèle de données, tu peux enlever ce prédicat et écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE dbo.FoaieParcursMasina
    SET CombustibilConsumat = TPA.NormaL100KM * FPM.KM
    FROM dbo.FoaieParcursMasina AS FPM
    	INNER JOIN dbo.TipuriAutomobile AS TPA
    	ON TPA.IdMasina = FPM.IdMasina
    @++
    Merci beaucoup c'etait ca!

    C'est resolu!

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

Discussions similaires

  1. [WD15] calcul dans une colonne table
    Par kirikou84 dans le forum WinDev
    Réponses: 13
    Dernier message: 23/08/2012, 18h35
  2. [SP-2010] Valeur calculée dans une colonne
    Par Ibelise dans le forum SharePoint
    Réponses: 2
    Dernier message: 18/01/2012, 14h32
  3. [XL-97] Ecrire résultat calcul dans une colonne déterminée
    Par Bocage dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/04/2009, 18h24
  4. Réponses: 3
    Dernier message: 14/06/2007, 13h35
  5. [VB.NET] Calculs dans une colonne d'un datagridview
    Par boulete dans le forum Windows Forms
    Réponses: 3
    Dernier message: 31/03/2006, 15h11

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