|
| | #1 |
|
Posts: n/a Hébergeur: | Bonjour J'ai un petit souci avec une requête. Plutôt que de longues explications, j'ai fait un exemple declare @compte table (idCompte int identity not null, libelle char(16)not null) insert into @compte (libelle) values ('Compte1'), ('Compte2'), ('Compte3'), ('Compte4') declare @operations table (idOperation int identity not null, montant money not null, datevaleur date not null, idCompte int not null, idCompteOrigine int null) insert into @operations (montant, datevaleur, idCompte) values (123.36, '12/06/2009', 2) ,(123.36, '12/06/2009',2) ,(123.36, '12/06/2009',2) declare @versements table (idVersement int identity not null, montant money not null, datevaleur date not null, idCompteOrigine int not null, idCompteVersement int null) insert into @versements (montant, datevaleur, idCompteOrigine, idCompteVersement) values (123.36, '12/06/2009', 1,2) ,(123.36, '12/06/2009',3,2) ,(123.36, '12/06/2009',4,2) select * from @compte c inner join @versements v on c.idCompte = v.idCompteOrigine inner join @operations o on o.idOperation = (select top 1 o2.idOperation from @operations o2 where v.montant = o2.montant and v.datevaleur = o2.datevaleur) update @operations set idCompteOrigine = c.idCompte from @compte c inner join @versements v on c.idCompte = v.idCompteOrigine inner join @operations o on o.idOperation = (select top 1 o2.idOperation from @operations o2 where v.montant = o2.montant and v.datevaleur = o2.datevaleur and v.idCompteVersement = o2.idCompte) select * from @operations Je veux mettre à jour ma table @operations avec les id des comptes qui ont fait les versements, seulement les 3 versements étant strictement identiques je n'arrive pas à associer chaque opération avec un compte différent à chaque fois. Quelqu'un saurait-il comment faire? Merci Geoffroy |
|
| | #2 |
|
Posts: n/a Hébergeur: | Quel serait l'état final de la table @operations que tu veux obtenir? -- Bien Cordialement Med Bouchenafa "Clark [MVP CRM]" <clark@nospam.nospam> wrote in message news:75872E90-2ABE-48CF-A907-9E7F94233106@microsoft.com... > Bonjour > J'ai un petit souci avec une requête. > Plutôt que de longues explications, j'ai fait un exemple > > declare @compte table > (idCompte int identity not null, > libelle char(16)not null) > insert into @compte (libelle) values ('Compte1'), ('Compte2'), > ('Compte3'), ('Compte4') > > declare @operations table > (idOperation int identity not null, > montant money not null, > datevaleur date not null, > idCompte int not null, > idCompteOrigine int null) > > insert into @operations > (montant, datevaleur, idCompte) > values > (123.36, '12/06/2009', 2) > ,(123.36, '12/06/2009',2) > ,(123.36, '12/06/2009',2) > > declare @versements table > (idVersement int identity not null, > montant money not null, > datevaleur date not null, > idCompteOrigine int not null, > idCompteVersement int null) > > insert into @versements > (montant, datevaleur, idCompteOrigine, idCompteVersement) > values > (123.36, '12/06/2009', 1,2) > ,(123.36, '12/06/2009',3,2) > ,(123.36, '12/06/2009',4,2) > > > select * from @compte c > inner join @versements v on c.idCompte = v.idCompteOrigine > inner join @operations o on o.idOperation = (select top 1 o2.idOperation > from @operations o2 > where v.montant = o2.montant and v.datevaleur = o2.datevaleur) > > update @operations > set idCompteOrigine = c.idCompte > from @compte c > inner join @versements v on c.idCompte = v.idCompteOrigine > inner join @operations o on o.idOperation = (select top 1 o2.idOperation > from @operations o2 > where v.montant = o2.montant and v.datevaleur = o2.datevaleur and > v.idCompteVersement = o2.idCompte) > > select * from @operations > > Je veux mettre à jour ma table @operations avec les id des comptes qui ont > fait les versements, seulement les 3 versements étant strictement > identiques je n'arrive pas à associer chaque opération avec un compte > différent à chaque fois. > Quelqu'un saurait-il comment faire? > Merci > Geoffroy |
|
| | #3 |
|
Posts: n/a Hébergeur: | Bonjour Quelque chose comme ça idOperation montant datevaleur idCompte idCompteOrigine 1 123,36 2009-06-12 2 1 2 123,36 2009-06-12 2 3 3 123,36 2009-06-12 2 4 Pour détailler j'ai 3 versements identiques de 3 comptes différents sur le même compte. Je dois modifer ma table @operations pour indiquer la provenance du versement. Comme ce sont les 3 mêmes, peu importe l'ordre d'affectation, mais il faut que j'arrive sur l'update à affecter à chaque fois un compte origine différent. J'espère arriver à me faire comprendre! Merci Geoffroy "Med Bouchenafa" <com.hotmail@bouchenafa> a écrit dans le message de news:E20AD1AE-5829-478B-AEE1-BC501EF5CAB2@microsoft.com... > Quel serait l'état final de la table @operations que tu veux obtenir? > > -- > Bien Cordialement > Med Bouchenafa > > "Clark [MVP CRM]" <clark@nospam.nospam> wrote in message > news:75872E90-2ABE-48CF-A907-9E7F94233106@microsoft.com... >> Bonjour >> J'ai un petit souci avec une requête. >> Plutôt que de longues explications, j'ai fait un exemple >> >> declare @compte table >> (idCompte int identity not null, >> libelle char(16)not null) >> insert into @compte (libelle) values ('Compte1'), ('Compte2'), >> ('Compte3'), ('Compte4') >> >> declare @operations table >> (idOperation int identity not null, >> montant money not null, >> datevaleur date not null, >> idCompte int not null, >> idCompteOrigine int null) >> >> insert into @operations >> (montant, datevaleur, idCompte) >> values >> (123.36, '12/06/2009', 2) >> ,(123.36, '12/06/2009',2) >> ,(123.36, '12/06/2009',2) >> >> declare @versements table >> (idVersement int identity not null, >> montant money not null, >> datevaleur date not null, >> idCompteOrigine int not null, >> idCompteVersement int null) >> >> insert into @versements >> (montant, datevaleur, idCompteOrigine, idCompteVersement) >> values >> (123.36, '12/06/2009', 1,2) >> ,(123.36, '12/06/2009',3,2) >> ,(123.36, '12/06/2009',4,2) >> >> >> select * from @compte c >> inner join @versements v on c.idCompte = v.idCompteOrigine >> inner join @operations o on o.idOperation = (select top 1 o2.idOperation >> from @operations o2 >> where v.montant = o2.montant and v.datevaleur = o2.datevaleur) >> >> update @operations >> set idCompteOrigine = c.idCompte >> from @compte c >> inner join @versements v on c.idCompte = v.idCompteOrigine >> inner join @operations o on o.idOperation = (select top 1 o2.idOperation >> from @operations o2 >> where v.montant = o2.montant and v.datevaleur = o2.datevaleur and >> v.idCompteVersement = o2.idCompte) >> >> select * from @operations >> >> Je veux mettre à jour ma table @operations avec les id des comptes qui >> ont fait les versements, seulement les 3 versements étant strictement >> identiques je n'arrive pas à associer chaque opération avec un compte >> différent à chaque fois. >> Quelqu'un saurait-il comment faire? >> Merci >> Geoffroy > |
|
| | #4 |
|
Posts: n/a Hébergeur: | Désolé, je ne vois pas trop il faut probablement quelque chose de plus discriminant -- Bien Cordialement Med Bouchenafa "Clark [MVP CRM]" <clark@nospam.nospam> wrote in message news:29C63262-8EC5-4B50-A3EB-6B4994CBEFC0@microsoft.com... > Bonjour > Quelque chose comme ça > idOperation montant datevaleur idCompte idCompteOrigine > 1 123,36 2009-06-12 2 1 > 2 123,36 2009-06-12 2 3 > 3 123,36 2009-06-12 2 4 > Pour détailler j'ai 3 versements identiques de 3 comptes différents sur le > même compte. > Je dois modifer ma table @operations pour indiquer la provenance du > versement. Comme ce sont les 3 mêmes, peu importe l'ordre d'affectation, > mais il faut que j'arrive sur l'update à affecter à chaque fois un compte > origine différent. > J'espère arriver à me faire comprendre! > Merci > Geoffroy > > "Med Bouchenafa" <com.hotmail@bouchenafa> a écrit dans le message de > news:E20AD1AE-5829-478B-AEE1-BC501EF5CAB2@microsoft.com... >> Quel serait l'état final de la table @operations que tu veux obtenir? >> >> -- >> Bien Cordialement >> Med Bouchenafa >> >> "Clark [MVP CRM]" <clark@nospam.nospam> wrote in message >> news:75872E90-2ABE-48CF-A907-9E7F94233106@microsoft.com... >>> Bonjour >>> J'ai un petit souci avec une requête. >>> Plutôt que de longues explications, j'ai fait un exemple >>> >>> declare @compte table >>> (idCompte int identity not null, >>> libelle char(16)not null) >>> insert into @compte (libelle) values ('Compte1'), ('Compte2'), >>> ('Compte3'), ('Compte4') >>> >>> declare @operations table >>> (idOperation int identity not null, >>> montant money not null, >>> datevaleur date not null, >>> idCompte int not null, >>> idCompteOrigine int null) >>> >>> insert into @operations >>> (montant, datevaleur, idCompte) >>> values >>> (123.36, '12/06/2009', 2) >>> ,(123.36, '12/06/2009',2) >>> ,(123.36, '12/06/2009',2) >>> >>> declare @versements table >>> (idVersement int identity not null, >>> montant money not null, >>> datevaleur date not null, >>> idCompteOrigine int not null, >>> idCompteVersement int null) >>> >>> insert into @versements >>> (montant, datevaleur, idCompteOrigine, idCompteVersement) >>> values >>> (123.36, '12/06/2009', 1,2) >>> ,(123.36, '12/06/2009',3,2) >>> ,(123.36, '12/06/2009',4,2) >>> >>> >>> select * from @compte c >>> inner join @versements v on c.idCompte = v.idCompteOrigine >>> inner join @operations o on o.idOperation = (select top 1 o2.idOperation >>> from @operations o2 >>> where v.montant = o2.montant and v.datevaleur = o2.datevaleur) >>> >>> update @operations >>> set idCompteOrigine = c.idCompte >>> from @compte c >>> inner join @versements v on c.idCompte = v.idCompteOrigine >>> inner join @operations o on o.idOperation = (select top 1 o2.idOperation >>> from @operations o2 >>> where v.montant = o2.montant and v.datevaleur = o2.datevaleur and >>> v.idCompteVersement = o2.idCompte) >>> >>> select * from @operations >>> >>> Je veux mettre à jour ma table @operations avec les id des comptes qui >>> ont fait les versements, seulement les 3 versements étant strictement >>> identiques je n'arrive pas à associer chaque opération avec un compte >>> différent à chaque fois. >>> Quelqu'un saurait-il comment faire? >>> Merci >>> Geoffroy >> > |
|
| | #5 |
|
Posts: n/a Hébergeur: | Utiliser un UPDATE est til obligatoire ? Dans ce cas de figure, le plus simple serait probablement de supprimer/résinsérer les lignes concernées plutôt que de faire un update. Mais le cas réel est sans doute plus complexe ? Si ce n'est pas un exercice ou une opération tout à fait exceptionnelle, je pense qu'il y a un problème de conception. L'opération devrait sans doute garder trace du versement dont elle est issue (avec des PK donc) pour pouvoir la mettre à jour si le versement est modifiée. Cette modification devient alors bien plus facile qu'elle que soit la donnée modifiée... -- Patrice "Clark [MVP CRM]" <clark@nospam.nospam> a écrit dans le message de groupe de discussion : 75872E90-2ABE-48CF-A907-9E7F94233106@microsoft.com... > Bonjour > J'ai un petit souci avec une requête. > Plutôt que de longues explications, j'ai fait un exemple > > declare @compte table > (idCompte int identity not null, > libelle char(16)not null) > insert into @compte (libelle) values ('Compte1'), ('Compte2'), > ('Compte3'), ('Compte4') > > declare @operations table > (idOperation int identity not null, > montant money not null, > datevaleur date not null, > idCompte int not null, > idCompteOrigine int null) > > insert into @operations > (montant, datevaleur, idCompte) > values > (123.36, '12/06/2009', 2) > ,(123.36, '12/06/2009',2) > ,(123.36, '12/06/2009',2) > > declare @versements table > (idVersement int identity not null, > montant money not null, > datevaleur date not null, > idCompteOrigine int not null, > idCompteVersement int null) > > insert into @versements > (montant, datevaleur, idCompteOrigine, idCompteVersement) > values > (123.36, '12/06/2009', 1,2) > ,(123.36, '12/06/2009',3,2) > ,(123.36, '12/06/2009',4,2) > > > select * from @compte c > inner join @versements v on c.idCompte = v.idCompteOrigine > inner join @operations o on o.idOperation = (select top 1 o2.idOperation > from @operations o2 > where v.montant = o2.montant and v.datevaleur = o2.datevaleur) > > update @operations > set idCompteOrigine = c.idCompte > from @compte c > inner join @versements v on c.idCompte = v.idCompteOrigine > inner join @operations o on o.idOperation = (select top 1 o2.idOperation > from @operations o2 > where v.montant = o2.montant and v.datevaleur = o2.datevaleur and > v.idCompteVersement = o2.idCompte) > > select * from @operations > > Je veux mettre à jour ma table @operations avec les id des comptes qui ont > fait les versements, seulement les 3 versements étant strictement > identiques je n'arrive pas à associer chaque opération avec un compte > différent à chaque fois. > Quelqu'un saurait-il comment faire? > Merci > Geoffroy |
|
| | #6 |
|
Posts: n/a Hébergeur: | Bonjour Oui le cas réel est effectivement plus complexe et m'oblige à faire un update. Je récupére les données à mettre à jour d'un export d'une autre base avec un certain nombre d'infos et je récupère ensuite d'un fichier plat, d'autres infos complémentaires. Bon je vais continuer à chercher. Merci Geoffroy "Patrice" <http://scribe-fr.blogspot.com/> a écrit dans le message de news:O2PdaVm%23JHA.1608@TK2MSFTNGP02.phx.gbl... > Utiliser un UPDATE est til obligatoire ? Dans ce cas de figure, le plus > simple serait probablement de supprimer/résinsérer les lignes concernées > plutôt que de faire un update. Mais le cas réel est sans doute plus > complexe ? > > Si ce n'est pas un exercice ou une opération tout à fait exceptionnelle, > je pense qu'il y a un problème de conception. L'opération devrait sans > doute garder trace du versement dont elle est issue (avec des PK donc) > pour pouvoir la mettre à jour si le versement est modifiée. Cette > modification devient alors bien plus facile qu'elle que soit la donnée > modifiée... > > -- > Patrice > > "Clark [MVP CRM]" <clark@nospam.nospam> a écrit dans le message de groupe > de discussion : 75872E90-2ABE-48CF-A907-9E7F94233106@microsoft.com... >> Bonjour >> J'ai un petit souci avec une requête. >> Plutôt que de longues explications, j'ai fait un exemple >> >> declare @compte table >> (idCompte int identity not null, >> libelle char(16)not null) >> insert into @compte (libelle) values ('Compte1'), ('Compte2'), >> ('Compte3'), ('Compte4') >> >> declare @operations table >> (idOperation int identity not null, >> montant money not null, >> datevaleur date not null, >> idCompte int not null, >> idCompteOrigine int null) >> >> insert into @operations >> (montant, datevaleur, idCompte) >> values >> (123.36, '12/06/2009', 2) >> ,(123.36, '12/06/2009',2) >> ,(123.36, '12/06/2009',2) >> >> declare @versements table >> (idVersement int identity not null, >> montant money not null, >> datevaleur date not null, >> idCompteOrigine int not null, >> idCompteVersement int null) >> >> insert into @versements >> (montant, datevaleur, idCompteOrigine, idCompteVersement) >> values >> (123.36, '12/06/2009', 1,2) >> ,(123.36, '12/06/2009',3,2) >> ,(123.36, '12/06/2009',4,2) >> >> >> select * from @compte c >> inner join @versements v on c.idCompte = v.idCompteOrigine >> inner join @operations o on o.idOperation = (select top 1 o2.idOperation >> from @operations o2 >> where v.montant = o2.montant and v.datevaleur = o2.datevaleur) >> >> update @operations >> set idCompteOrigine = c.idCompte >> from @compte c >> inner join @versements v on c.idCompte = v.idCompteOrigine >> inner join @operations o on o.idOperation = (select top 1 o2.idOperation >> from @operations o2 >> where v.montant = o2.montant and v.datevaleur = o2.datevaleur and >> v.idCompteVersement = o2.idCompte) >> >> select * from @operations >> >> Je veux mettre à jour ma table @operations avec les id des comptes qui >> ont fait les versements, seulement les 3 versements étant strictement >> identiques je n'arrive pas à associer chaque opération avec un compte >> différent à chaque fois. >> Quelqu'un saurait-il comment faire? >> Merci >> Geoffroy > > |
|
![]() |
| Thread Tools | |
| |