Voila j'ais besoin de mettre à jour plusieurs champs d'une table a
partir d'un regroupement d'une autre table. Actuellement je fais une
instruction dans le genre suivant :
UDPATE T1 SET
T1_MIN = (SELECT MIN(T2_VAL) FROM T2 WHERE T1_T2_ID = T2_ID),
T1_MAX = (SELECT MAX(T2_VAL) FROM T2 WHERE T1_T2_ID = T2_ID),
T1_AVG = (SELECT AVG(T2_VAL) FROM T2 WHERE T1_T2_ID = T2_ID)
Je trouve ca un peu lourd et je me demandais si il était possible de
faire quelque chose d'identique avec la clause FROM dans le genre :
UPDATE T1 SET
T1_MIN = MIN(T2_VAL),
T1_MAX = MAX(T2_VAL),
T1_AVG = AVG(T2_VAL)
FROM
T1
LEFT JOIN T2 ON T1_T2_ID = T2_ID
Mais ca ne fonctionne pas j'ai toujours l'erreur :
'Il manque un agrégat dans la liste de définition d'une instruction UPDATE.'
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
Patrice
Même message qu'avec le group by ?
--
"Yanos El Guerilleros" a écrit dans le message de news:ukQb0%
Salut,
Voila j'ais besoin de mettre à jour plusieurs champs d'une table a partir d'un regroupement d'une autre table. Actuellement je fais une instruction dans le genre suivant :
UDPATE T1 SET T1_MIN = (SELECT MIN(T2_VAL) FROM T2 WHERE T1_T2_ID = T2_ID), T1_MAX = (SELECT MAX(T2_VAL) FROM T2 WHERE T1_T2_ID = T2_ID), T1_AVG = (SELECT AVG(T2_VAL) FROM T2 WHERE T1_T2_ID = T2_ID)
Je trouve ca un peu lourd et je me demandais si il était possible de faire quelque chose d'identique avec la clause FROM dans le genre :
UPDATE T1 SET T1_MIN = MIN(T2_VAL), T1_MAX = MAX(T2_VAL), T1_AVG = AVG(T2_VAL) FROM T1 LEFT JOIN T2 ON T1_T2_ID = T2_ID
Mais ca ne fonctionne pas j'ai toujours l'erreur : 'Il manque un agrégat dans la liste de définition d'une instruction
UPDATE.'
même si je lui met un GROUP BY.
Alors est-ce tout simplement possible ?
Merci
A++
Yanos
Même message qu'avec le group by ?
--
"Yanos El Guerilleros" <yeg_NO_@_SPAM_yegounet.net> a écrit dans le message
de news:ukQb0%23c9FHA.220@TK2MSFTNGP14.phx.gbl...
Salut,
Voila j'ais besoin de mettre à jour plusieurs champs d'une table a
partir d'un regroupement d'une autre table. Actuellement je fais une
instruction dans le genre suivant :
UDPATE T1 SET
T1_MIN = (SELECT MIN(T2_VAL) FROM T2 WHERE T1_T2_ID = T2_ID),
T1_MAX = (SELECT MAX(T2_VAL) FROM T2 WHERE T1_T2_ID = T2_ID),
T1_AVG = (SELECT AVG(T2_VAL) FROM T2 WHERE T1_T2_ID = T2_ID)
Je trouve ca un peu lourd et je me demandais si il était possible de
faire quelque chose d'identique avec la clause FROM dans le genre :
UPDATE T1 SET
T1_MIN = MIN(T2_VAL),
T1_MAX = MAX(T2_VAL),
T1_AVG = AVG(T2_VAL)
FROM
T1
LEFT JOIN T2 ON T1_T2_ID = T2_ID
Mais ca ne fonctionne pas j'ai toujours l'erreur :
'Il manque un agrégat dans la liste de définition d'une instruction
"Yanos El Guerilleros" a écrit dans le message de news:ukQb0%
Salut,
Voila j'ais besoin de mettre à jour plusieurs champs d'une table a partir d'un regroupement d'une autre table. Actuellement je fais une instruction dans le genre suivant :
UDPATE T1 SET T1_MIN = (SELECT MIN(T2_VAL) FROM T2 WHERE T1_T2_ID = T2_ID), T1_MAX = (SELECT MAX(T2_VAL) FROM T2 WHERE T1_T2_ID = T2_ID), T1_AVG = (SELECT AVG(T2_VAL) FROM T2 WHERE T1_T2_ID = T2_ID)
Je trouve ca un peu lourd et je me demandais si il était possible de faire quelque chose d'identique avec la clause FROM dans le genre :
UPDATE T1 SET T1_MIN = MIN(T2_VAL), T1_MAX = MAX(T2_VAL), T1_AVG = AVG(T2_VAL) FROM T1 LEFT JOIN T2 ON T1_T2_ID = T2_ID
Mais ca ne fonctionne pas j'ai toujours l'erreur : 'Il manque un agrégat dans la liste de définition d'une instruction
UPDATE.'
même si je lui met un GROUP BY.
Alors est-ce tout simplement possible ?
Merci
A++
Yanos
Patrice
Je pense que le problème est que le group by ne peut pas s'appliquer sur la jointure. Je pense plutôt à quelque chose comme :
UPDATE a SET Total=b.Total FROM a JOIN (SELECT Data,SUM(Valeur) AS Total FROM B GROUP BY Data) AS b ON a.Data=B.Data
-- Patrice
"Yanos El Guerilleros" a écrit dans le message de news:ukQb0%
Salut,
Voila j'ais besoin de mettre à jour plusieurs champs d'une table a partir d'un regroupement d'une autre table. Actuellement je fais une instruction dans le genre suivant :
UDPATE T1 SET T1_MIN = (SELECT MIN(T2_VAL) FROM T2 WHERE T1_T2_ID = T2_ID), T1_MAX = (SELECT MAX(T2_VAL) FROM T2 WHERE T1_T2_ID = T2_ID), T1_AVG = (SELECT AVG(T2_VAL) FROM T2 WHERE T1_T2_ID = T2_ID)
Je trouve ca un peu lourd et je me demandais si il était possible de faire quelque chose d'identique avec la clause FROM dans le genre :
UPDATE T1 SET T1_MIN = MIN(T2_VAL), T1_MAX = MAX(T2_VAL), T1_AVG = AVG(T2_VAL) FROM T1 LEFT JOIN T2 ON T1_T2_ID = T2_ID
Mais ca ne fonctionne pas j'ai toujours l'erreur : 'Il manque un agrégat dans la liste de définition d'une instruction
UPDATE.'
même si je lui met un GROUP BY.
Alors est-ce tout simplement possible ?
Merci
A++
Yanos
Je pense que le problème est que le group by ne peut pas s'appliquer sur la
jointure. Je pense plutôt à quelque chose comme :
UPDATE a SET Total=b.Total
FROM a
JOIN (SELECT Data,SUM(Valeur) AS Total FROM B GROUP BY Data) AS b
ON a.Data=B.Data
--
Patrice
"Yanos El Guerilleros" <yeg_NO_@_SPAM_yegounet.net> a écrit dans le message
de news:ukQb0%23c9FHA.220@TK2MSFTNGP14.phx.gbl...
Salut,
Voila j'ais besoin de mettre à jour plusieurs champs d'une table a
partir d'un regroupement d'une autre table. Actuellement je fais une
instruction dans le genre suivant :
UDPATE T1 SET
T1_MIN = (SELECT MIN(T2_VAL) FROM T2 WHERE T1_T2_ID = T2_ID),
T1_MAX = (SELECT MAX(T2_VAL) FROM T2 WHERE T1_T2_ID = T2_ID),
T1_AVG = (SELECT AVG(T2_VAL) FROM T2 WHERE T1_T2_ID = T2_ID)
Je trouve ca un peu lourd et je me demandais si il était possible de
faire quelque chose d'identique avec la clause FROM dans le genre :
UPDATE T1 SET
T1_MIN = MIN(T2_VAL),
T1_MAX = MAX(T2_VAL),
T1_AVG = AVG(T2_VAL)
FROM
T1
LEFT JOIN T2 ON T1_T2_ID = T2_ID
Mais ca ne fonctionne pas j'ai toujours l'erreur :
'Il manque un agrégat dans la liste de définition d'une instruction
Je pense que le problème est que le group by ne peut pas s'appliquer sur la jointure. Je pense plutôt à quelque chose comme :
UPDATE a SET Total=b.Total FROM a JOIN (SELECT Data,SUM(Valeur) AS Total FROM B GROUP BY Data) AS b ON a.Data=B.Data
-- Patrice
"Yanos El Guerilleros" a écrit dans le message de news:ukQb0%
Salut,
Voila j'ais besoin de mettre à jour plusieurs champs d'une table a partir d'un regroupement d'une autre table. Actuellement je fais une instruction dans le genre suivant :
UDPATE T1 SET T1_MIN = (SELECT MIN(T2_VAL) FROM T2 WHERE T1_T2_ID = T2_ID), T1_MAX = (SELECT MAX(T2_VAL) FROM T2 WHERE T1_T2_ID = T2_ID), T1_AVG = (SELECT AVG(T2_VAL) FROM T2 WHERE T1_T2_ID = T2_ID)
Je trouve ca un peu lourd et je me demandais si il était possible de faire quelque chose d'identique avec la clause FROM dans le genre :
UPDATE T1 SET T1_MIN = MIN(T2_VAL), T1_MAX = MAX(T2_VAL), T1_AVG = AVG(T2_VAL) FROM T1 LEFT JOIN T2 ON T1_T2_ID = T2_ID
Mais ca ne fonctionne pas j'ai toujours l'erreur : 'Il manque un agrégat dans la liste de définition d'une instruction
UPDATE.'
même si je lui met un GROUP BY.
Alors est-ce tout simplement possible ?
Merci
A++
Yanos
Yanos El Guerilleros
Patrice a écrit :
Je pense que le problème est que le group by ne peut pas s'appliquer sur la jointure. Je pense plutôt à quelque chose comme :
UPDATE a SET Total=b.Total FROM a JOIN (SELECT Data,SUM(Valeur) AS Total FROM B GROUP BY Data) AS b ON a.Data=B.Data
Exact, j'étais trop fatigué hier soir, ce matin en me levant j'ai eu la même idée :)
Merci,
A++
Yanos
Patrice a écrit :
Je pense que le problème est que le group by ne peut pas s'appliquer sur la
jointure. Je pense plutôt à quelque chose comme :
UPDATE a SET Total=b.Total
FROM a
JOIN (SELECT Data,SUM(Valeur) AS Total FROM B GROUP BY Data) AS b
ON a.Data=B.Data
Exact, j'étais trop fatigué hier soir, ce matin en me levant j'ai eu la
même idée :)