Aide : requête

Le
JC
Je souhaite faire une mise à jour
d'une table A à partir d'une table B.
Or dans la table B j'ai plusieurs enregistrements possibles,
c'est le champ datedebut qui va lever l'ambiguité.


Table A :

Date ID P
-- -- -
20040210 1 ?
20040301 2 ?


Table B :

ID DATE_DEBUT P
--
1 20031002 C
1 20031216 A
1 20040401 D
2 20020101 C
2 20040401 B

Il faut prendre max(tableB.date_debut)<=tableA.Date

Résultats :

Date ID P
-- -- -
20040210 1 A
20040210 2 C


UPDATE tableA SET
P = tableB.P
FROM tableA
JOIN tableB ON (????????????)


Cordialement,
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Fred BROUARD
Le #11720251
Pour avoir les valeurs correctes :

SELECT B0.IDB, B0.BDate_Debut, B0.PB
FROM T_B B0
INNER JOIN (SELECT MIN(BDate_Debut) BDateMax, IDB
FROM T_B B
INNER JOIN T_A A
ON B.IDB = A.IDA
AND B.BDate_Debut <= A.ADate
GROUP BY IDB) B1
ON B0.IDB = B1.IDB
AND B0.BDate_Debut = B1.BDateMax


IDB BDate_Debut PB
----------- ------------------------------------------------------ ----
1 2003-10-02 00:00:00.000 C
2 2002-01-01 00:00:00.000 C


Dès lors, faire l'update avec corrélation de cette requête.

A +


JC a écrit:
Je souhaite faire une mise à jour
d'une table A à partir d'une table B.
Or dans la table B j'ai plusieurs enregistrements possibles,
c'est le champ datedebut qui va lever l'ambiguité.


Table A :

Date ID P
----------- ----- ----
20040210 1 ?
20040301 2 ?


Table B :

ID DATE_DEBUT P
----- ------------------ ---
1 20031002 C
1 20031216 A
1 20040401 D
2 20020101 C
2 20040401 B

Il faut prendre max(tableB.date_debut)<=tableA.Date

Résultats :

Date ID P
----------- ----- ----
20040210 1 A
20040210 2 C


UPDATE tableA SET
P = tableB.P
FROM tableA
JOIN tableB ON (????????????)


Cordialement,






--
Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************
Publicité
Poster une réponse
Anonyme