PHWinfo banniere

ACCUEIL ANNUAIRE ARTICLES COMPARATIF HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Go Back   PHWinfo > Forums Hébergement > Forum Hébergement serveur > ms.public.fr.sqlserver > Problème de requête
Register FAQ Members List Search Today's Posts Mark Forums Read
Problème de requête

Reply
 
Thread Tools
Old 06/30/09, 09:53   #1
Clark [MVP CRM]
Aucun Avatar
 
Posts: n/a
Hébergeur:
Default Problème de requête

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

  Reply With Quote
Old 06/30/09, 12:01   #2
Med Bouchenafa
Aucun Avatar
 
Posts: n/a
Hébergeur:
Default Re: Problème de requête

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


  Reply With Quote
Old 06/30/09, 13:42   #3
Clark [MVP CRM]
Aucun Avatar
 
Posts: n/a
Hébergeur:
Default Re: Problème de requête

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

>


  Reply With Quote
Old 07/01/09, 08:12   #4
Med Bouchenafa
Aucun Avatar
 
Posts: n/a
Hébergeur:
Default Re: Problème de requête

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

>>

>


  Reply With Quote
Old 07/01/09, 18:02   #5
Patrice
Aucun Avatar
 
Posts: n/a
Hébergeur:
Default Re: Problème de requête

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



  Reply With Quote
Old 07/02/09, 08:43   #6
Clark [MVP CRM]
Aucun Avatar
 
Posts: n/a
Hébergeur:
Default Re: Problème de requête

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

>
>


  Reply With Quote
Reply


Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are Off
Refbacks are Off


All times are GMT +1. The time now is 20:12.


Powered by vBulletin® ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
PHWinfo is a website Education Without Frontiers
Ad Management by RedTyger
All rights reserved
Page generated in 0.19396 seconds with 7 queries