× Aidez la recherche contre le COVID-19 avec votre ordi ! Rejoignez l'équipe PC Astuces Folding@home
 > Tous les forums > Forum Autres langages
 aide débutant sql
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
computer60
  Posté le 28/10/2015 @ 12:00 
Aller en bas de la page 
Nouvelle astucienne

Bonjour

Nous voudrions signer une zone en négative suivant une condition dans sql le

début de notre syntaxe est comme ci dessous :

SELECT FACTUP00.TYPE_FACTURE, FACTUP00.INTERNE, FACTUP00.DATE_FACTURE, FACTUP01.INTERNE, FACTUP01.MNT_1_RUB, FACTUP01.CD_RUB

FROM S651C3FE.RESEAUF.FACTUP00 FACTUP00, S651C3FE.RESEAUF.FACTUP01 FACTUP01

WHERE FACTUP00.INTERNE = FACTUP01.INTERNE AND ((FACTUP00.DATE_FACTURE=20151027))

TYPE_FACTURE MNT_1_RUB

F4174682015102741746846,511010

F4174682015102741746823,341016

F4174682015102741746811,941025

F41746820151027417468183,001259

F4174682015102741746855,001269

F417468201510274174689,521881

F4174682015102741746832,541920

F4174682015102741746843,011921

F4174682015102741746811,041922

F4174682015102741746865,681924

F41746820151027417468238,001991

F417468201510274174683,941994

F4174542015102741745423,341015

F41745420151027417454202,001269

F417454201510274174548,081881

F417454201510274174541,851884

F417454201510274174543,501885

F4174542015102741745413,881916

F4174542015102741745453,601917

F4174542015102741745447,671973

F41745420151027417454124,541977

F4174542015102741745457,961978

F41745420151027417454202,001991

F41745420151027417454-118,991993

F41743620151027417436514,092358

F4174362015102741743631,312594

F4174362015102741743657,272881

F417436201510274174365,282884

F4174362015102741743610,032885

F41743620151027417436192,962910

F41743620151027417436502,082924

F41743620151027417436456,602955

F4174362015102741743623,342956

F4174362015102741743672,822957

F4174362015102741743672,822964

F4174362015102741743623,342970

F41743620151027417436545,402991

F41743620151027417436-798,562993

F4174652015102741746531,321010

F4174652015102741746523,341016

F4174652015102741746510,651025

A41746520151027417465103,531300

F4174652015102741746516,001351

F4174652015102741746510,871881

F4174652015102741746523,341920

F4174652015102741746557,041921

F4174652015102741746510,651922

F4174652015102741746554,881924

F41746520151027417465103,531991

F41746520151027417465-107,691994

A41746520151027417465,601999

Ou doit on se placer et quelle fonction peut on utiliser suivant la condition suivante

si zone type_facture = a A mettre la zone MNT_1_1RUB en négatif ?

Merci pour votre aide

Publicité
Titus68
 Posté le 28/10/2015 à 13:09 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Si c'est pour avoir le signe - à l'affichage, çà dépend du moteur de base de données :

- sous oracle, il y a la fonction decode :

DECODE(FACTUP00.TYPE_FACTURE,'a',FACTUP01.MNT_1_RUB*-1,FACTUP01.MNT_1_RUB) remplacer FACTUP01.MNT_1_RUB sans la select par çà

Cà équivaut à : si FACTUP00.TYPE_FACTURE = 'a' alors FACTUP01.MNT_1_RUB*-1 (on multiplie par -1) sinon on affichage FACTUP01.MNT_1_RUB tel quel

http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions040.htm

- sous sqlserver : çà doit être avec CASE ..

CASE FACTUP00.TYPE_FACTURE
	WHEN'a'THENFACTUP01.MNT_1_RUB*-1ELSEFACTUP01.MNT_1_RUBEND IF

Sinon si c'est une zone à modifier dans la base, utiliser la fonction UPDATE :
UPDATE
651C3FE.RESEAUF.FACTUP01 set FACTUP01.MNT_1_RUB = FACTUP01.MNT_1_RUB *-1 where ...




Modifié par Titus68 le 28/10/2015 13:27
computer60
 Posté le 28/10/2015 à 14:22 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Nouvelle astucienne

Merci Titus68

Nous avons essayé en incluant la fonction update en fin mais nous avons des messages d'erreur:

SELECT FACTUP00.TYPE_FACTURE, FACTUP00.INTERNE, FACTUP00.DATE_FACTURE, FACTUP01.INTERNE, FACTUP01.MNT_1_RUB, FACTUP01.CD_RUB

FROM S651C3FE.RESEAUF.FACTUP00 FACTUP00, S651C3FE.RESEAUF.FACTUP01 FACTUP01

WHERE FACTUP00.INTERNE = FACTUP01.INTERNE AND ((FACTUP00.DATE_FACTURE=20151027))

UPDATE 651C3FE.RESEAUF.FACTUP01 set FACTUP01.MNT_1_RUB = FACTUP01.MNT_1_RUB *-1

Le message est le suivant :

SQL0199 le mot clé update est mal placée

___________________________

Et avec l'autre fonction placée au même endroit nous le message suivant :

idem le mot clé case est mal placée

Peux tu nous dire ou nous devons se placer et manque t'il des virgules ou des parenthèses et doit on tout coller oui oui

nous sommes vraiment des débutantes....

Merci de votre aide

Titus68
 Posté le 28/10/2015 à 14:55 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

En fait soit vous voulez faire une requête pour afficher : SELECT (dans ce cas le montant sera bien affiché avec le négatif mais il ne sera pas modifié dans la table)

soit une requête pour mettre à jour le montant dans la table 51C3FE.RESEAUF.FACTUP01, (mais après çà va modifier le montant dans la table : c'est ce que vous voulez).

Pour l'ordre update je n'ai indiqué que le début car je ne sais pas exactement ce que vous voulez faire.

Pour l'update çà doit être :

Avant l'update, je vous conseille quand même de faire une sauvegarde de la table :

651C3FE.RESEAUF.FACTUP01 par :

create table 651C3FE.RESEAUF.FACTUP01_SVG as select * from 651C3FE.RESEAUF.FACTUP01

puis

UPDATE 651C3FE.RESEAUF.FACTUP01 set S651C3FE.RESEAUF.FACTUP01.MNT_1_RUB = S651C3FE.RESEAUF.FACTUP01.MNT_1_RUB *-1 where S651C3FE.RESEAUF.FACTUP01.INTERNE in (SELECT INTERNE FROM S651C3FE.RESEAUF.FACTUP00 WHERE DATE_FACTURE=20151027)

l'ordre (SELECT ... 20151027) va donc sélectionner tous les INTERNE dont la date est 27/10/2015) et passer la liste des INTERNE à l'ordre UPDATE par S651C3FE.RESEAUF.FACTUP01.INTERNE in (SELECT INTERNE

J'espère que c'est juste. La syntaxe dépend sans doute du moteur de base de données que vous avez (là c'est pour Oracle), à voir ... J'espère aussi que vous avez les droits sur la table pour faire des UPDATE et un CREATE TABLE au niveau du schéma.



Modifié par Titus68 le 28/10/2015 14:58
computer60
 Posté le 28/10/2015 à 15:23 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Nouvelle astucienne

Merci pour le retour

si on comprend bien quand vous parlez de table se sont les fichiers?

Dans ce cas nous on ne veut que afficher le négatif dans la zone montant rubrique comment doit on procéder svp?

Merci

Titus68
 Posté le 28/10/2015 à 16:01 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

si on comprend bien quand vous parlez de table se sont les fichiers?

C'est un peu çà mais pas exactement car parfois un seul fichier peut contenir un schéma (généralement un nom d'utilisateur) qui lui-même contient des tables qui elles mêmes ont des colonnes.

Dans une table on peut stocker des infos (par exemple des données d'une facture), dans une autre table les infos du client... tout dépend comment le schéma de la base a été conçu par le développeur.

tout dépend aussi du type de base de données :

- pour oracle, sqlserver on regroupe les tables dans un fichier (mais on peut aussi regrouper en n fichiers de x tables).

- pour mysql, c'est différent.

Voir :

https://fr.wikipedia.org/wiki/Base_de_donn%C3%A9es

Sinon pour les tables des SELECT ne font qu'extraire les infos, les UPDATE, DELETE ... modifient le contenu des tables.

Essayer :

SELECT FACTUP00.TYPE_FACTURE, FACTUP00.INTERNE, FACTUP00.DATE_FACTURE, FACTUP01.INTERNE, DECODE(FACTUP00.TYPE_FACTURE,'a',FACTUP01.MNT_1_RUB*-1,FACTUP01.MNT_1_RUB), FACTUP01.CD_RUB

FROM S651C3FE.RESEAUF.FACTUP00 FACTUP00, S651C3FE.RESEAUF.FACTUP01 FACTUP01

WHERE FACTUP00.INTERNE = FACTUP01.INTERNE AND ((FACTUP00.DATE_FACTURE=20151027))

Dans votre cas il semble déjà que les infos des factures sont éclatées dans 2 tables différentes : FACTUP01 et FACTUP00 probablement FACTUP00 pour l'entête de la facture (n° client, date de la facture et un n° de facture (INTERNE) et une autre table FACTUP01 pour les lignes des articles de la facture (je suppose). Pour faire le lien entre les 2 tables : il y a la zone INTERNE (peut-être un n° de facture ?)

Il faudrait me dire à quel type de bases vous vous connectez : oracle, mysql, sqlserver ou mssql, sqlite, ...



Modifié par Titus68 le 28/10/2015 16:06
computer60
 Posté le 28/10/2015 à 16:22 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Nouvelle astucienne

merci

Nous avons pris toute la syntaxe ci dessous et relancer et nous avons un autre message

qui te dis:

SQL0204 DECODE de type *N dans *LIBL non trouvé

et nous sommes sur Microsoft Query!!!

SELECT FACTUP00.TYPE_FACTURE, FACTUP00.INTERNE, FACTUP00.DATE_FACTURE, FACTUP01.INTERNE, DECODE(FACTUP00.TYPE_FACTURE,'a',FACTUP01.MNT_1_RUB*-1,FACTUP01.MNT_1_RUB), FACTUP01.CD_RUB

FROM S651C3FE.RESEAUF.FACTUP00 FACTUP00, S651C3FE.RESEAUF.FACTUP01 FACTUP01

WHERE FACTUP00.INTERNE = FACTUP01.INTERNE AND ((FACTUP00.DATE_FACTURE=20151027))

Merci pour ton aide

Titus68
 Posté le 28/10/2015 à 16:40 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

J'aurais pensé à toutes sauf celle-là, je n'utilise pas mais essayer avec

SELECT FACTUP00.TYPE_FACTURE, FACTUP00.INTERNE, FACTUP00.DATE_FACTURE, FACTUP01.INTERNE, SWTICH(FACTUP00.TYPE_FACTURE = 'a',FACTUP01.MNT_1_RUB*-1,FACTUP01.MNT_1_RUB), FACTUP01.CD_RUB

FROM S651C3FE.RESEAUF.FACTUP00 FACTUP00, S651C3FE.RESEAUF.FACTUP01 FACTUP01

WHERE FACTUP00.INTERNE = FACTUP01.INTERNE AND ((FACTUP00.DATE_FACTURE=20151027))

Si çà marche pas, essayer peut-être avec :

FACTUP00.TYPE_FACTURE = "a" (" à la place de ')

 


Modifié par Titus68 le 28/10/2015 16:50
Titus68
 Posté le 28/10/2015 à 16:48 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Anonyme,

Ils ont peut-être réussi à hacker un serveur ... m...e ma carte de crédit !



Modifié par Titus68 le 28/10/2015 16:51
Publicité
Titus68
 Posté le 28/10/2015 à 17:15 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Rectificatif c'est pas SWTICH mais SWITCH

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Les bons plans du moment PC Astuces

Tous les Bons Plans
129,90 €Fauteuil de bureau Gaming Arozzi Inizio à 129,90 €
Valable jusqu'au 30 Novembre

Cdiscount fait une promotion sur le fauteuil de bureau Gaming Arozzi Inizio qui passe à 129,90 € alors qu'on le trouve habituellement autour de 200 €. Ce fauteuil est inclinable à 180 €, possède des accoudoirs ajustables, des coussins pour les lombaires et la nuque. Poids max : 120 kg.


> Voir l'offre
66,21 €Batterie de voiture Bosch s4005 - 60Ah / 540A à 66,21 €
Valable jusqu'au 30 Novembre

Amazon fait une belle promotion sur la batterie de voiture Bosch s4005 - 60Ah / 540A qui passe à 66,21 € livrée gratuitement alors qu'on la trouver ailleurs à plus de 80 €.


> Voir l'offre
30 €Jeu PC Red Dead Redemption 2 à 30 €
Valable jusqu'au 30 Novembre

Amazon fait une belle promotion sur la version PC du jeu Red Dead Redemption 2 qui passe à 30 €. La boîte de jeu contient un code de téléchargement. Vainqueur de plus de 175 récompenses de jeu de l'année et noté plus de 250 fois avec la meilleure note, Red Dead Redemption 2 nous raconte l'histoire épique de la fuite d'Arthur Morgan et de la bande de Dutch van der Linde à travers l'Amérique à l'aube de l'ère moderne. Inclut également l'accès au monde de Red Dead Online.


> Voir l'offre

Sujets relatifs
Aide port serie et à la programmation
jeux android kill shot de l'aide svp
Aide pour un programme simple en C++
Aide POur initiation a SQL ( oracle 10G)
DEMANDE AIDE
demande d'aide pour un petit script
[C] Pb utilisation de malloc (débutant)
Convertir un fichier d'aide .HLP en .HTML par
quel SGBD apprendre pour debutant ?
Aide à la réalisation d'un programme
Plus de sujets relatifs à aide débutant sql
 > Tous les forums > Forum Autres langages