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 (????????????)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Fred BROUARD
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: ******************
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:brouardf@club-internet.fr ******************
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: ******************