Pas les idées claires moi ce matin !!!
Sgbd MySQL 4.0.23 pre 4.1
Soit une table PEOPLE_RESULT avec entre autre les colonnes
RES_ID Identif
POD_ID Code periode
PPL_ID Id people
RES_VAL07 Points mois
RES_VAL08 Points cumulés au mois
donc j'ai dans cette table des points mensuels, un enreg par mois
POD_ID 200501,200402,200503 etc .. et par individu (PPL_ID).
et la Table PERIOD
POD_ID Id periode
POD_REFEXT Code periode (ex '200501')
Je veux calculer et màj dans RES_VAL08 les points cumulés à ce mois,
soit RES_VAL08 de 200503=Somme des points RES_VAL07 de 200501 à 200503
pour une periode de ref 200503.
Simplissime me dis-je en 1 requete cela doit être torché et je n'y
arrive pas.
Pour l'instant je passe par 3 temps.
1 - fetch sur la periode 200503 (pDeb)
SELECT PEOPLE_RESULT.RES_ID,PEOPLE_RESULT.PPL_ID,PEOPLE_RESULT.POD_ID
FROM PEOPLE_RESULT "+...
" INNER JOIN PERIOD ON PERIOD.POD_ID=PEOPLE_RESULT.POD_ID "+...
" WHERE PERIOD.POD_REFEXT ="+Quote(pDeb)+" AND PERIOD.LVL_ID=219
"+...
" ORDER BY PPL_ID"
2 - pour chaque PPL_ID, calcul de
SELECT SUM(RES_VAL07)AS VAL08 FROM PEOPLE_RESULT
INNER JOIN PERIOD ON PERIOD.POD_ID=PEOPLE_RESULT.POD_ID
WHERE PERIOD.POD_REFEXT BETWEEN '200501' AND '200503' AND
PERIOD.LVL_ID=219
WHERE PPL_ID="+PPL_ID
3 - update
Et franchement je pense qu'il y a mieux.
--
Eric Roumégou
http://cerbermail.com/?TSoulBerPA
(cliquez sur le lien ci-dessus pour me contacter en privé)
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
ManuPavy
Roumegou Eric wrote:
Pas les idées claires moi ce matin !!! Sgbd MySQL 4.0.23 pre 4.1 Soit une table PEOPLE_RESULT avec entre autre les colonnes
RES_ID Identif POD_ID Code periode PPL_ID Id people RES_VAL07 Points mois RES_VAL08 Points cumulés au mois
donc j'ai dans cette table des points mensuels, un enreg par mois POD_ID 200501,200402,200503 etc .. et par individu (PPL_ID). et la Table PERIOD POD_ID Id periode POD_REFEXT Code periode (ex '200501')
Je veux calculer et màj dans RES_VAL08 les points cumulés à ce mois, soit RES_VAL08 de 200503=Somme des points RES_VAL07 de 200501 à 200503 pour une periode de ref 200503.
Simplissime me dis-je en 1 requete cela doit être torché et je n'y arrive pas.
Pour l'instant je passe par 3 temps. 1 - fetch sur la periode 200503 (pDeb) SELECT PEOPLE_RESULT.RES_ID,PEOPLE_RESULT.PPL_ID,PEOPLE_RESULT.POD_ID FROM PEOPLE_RESULT "+... " INNER JOIN PERIOD ON PERIOD.POD_ID=PEOPLE_RESULT.POD_ID "+... " WHERE PERIOD.POD_REFEXT ="+Quote(pDeb)+" AND PERIOD.LVL_ID!9 "+... " ORDER BY PPL_ID" 2 - pour chaque PPL_ID, calcul de SELECT SUM(RES_VAL07)AS VAL08 FROM PEOPLE_RESULT INNER JOIN PERIOD ON PERIOD.POD_ID=PEOPLE_RESULT.POD_ID WHERE PERIOD.POD_REFEXT BETWEEN '200501' AND '200503' AND PERIOD.LVL_ID!9 WHERE PPL_ID="+PPL_ID 3 - update
Et franchement je pense qu'il y a mieux.
Pour les deux premieres etapes, je pense qu il est possible de les rassembler par un group by : select ... inner join inner join where ... group by PPL_ID having PERIOD.POD_REFEXT BETWEEN '200501' AND '200503' AND PERIOD.LVL_ID!9
Le problème est que ca te fera utiliser une double jointure (que Windev ne supporte pas) et donc il te faudra passer par un hRequeteSansCorrection (ou alors tu transformes ca dans un where)
Manu
Roumegou Eric wrote:
Pas les idées claires moi ce matin !!!
Sgbd MySQL 4.0.23 pre 4.1
Soit une table PEOPLE_RESULT avec entre autre les colonnes
RES_ID Identif
POD_ID Code periode
PPL_ID Id people
RES_VAL07 Points mois
RES_VAL08 Points cumulés au mois
donc j'ai dans cette table des points mensuels, un enreg par mois POD_ID
200501,200402,200503 etc .. et par individu (PPL_ID).
et la Table PERIOD
POD_ID Id periode
POD_REFEXT Code periode (ex '200501')
Je veux calculer et màj dans RES_VAL08 les points cumulés à ce mois,
soit RES_VAL08 de 200503=Somme des points RES_VAL07 de 200501 à 200503
pour une periode de ref 200503.
Simplissime me dis-je en 1 requete cela doit être torché et je n'y
arrive pas.
Pour l'instant je passe par 3 temps.
1 - fetch sur la periode 200503 (pDeb)
SELECT PEOPLE_RESULT.RES_ID,PEOPLE_RESULT.PPL_ID,PEOPLE_RESULT.POD_ID
FROM PEOPLE_RESULT "+...
" INNER JOIN PERIOD ON PERIOD.POD_ID=PEOPLE_RESULT.POD_ID "+...
" WHERE PERIOD.POD_REFEXT ="+Quote(pDeb)+" AND PERIOD.LVL_ID!9 "+...
" ORDER BY PPL_ID"
2 - pour chaque PPL_ID, calcul de
SELECT SUM(RES_VAL07)AS VAL08 FROM PEOPLE_RESULT
INNER JOIN PERIOD ON PERIOD.POD_ID=PEOPLE_RESULT.POD_ID
WHERE PERIOD.POD_REFEXT BETWEEN '200501' AND '200503' AND PERIOD.LVL_ID!9
WHERE PPL_ID="+PPL_ID
3 - update
Et franchement je pense qu'il y a mieux.
Pour les deux premieres etapes, je pense qu il est possible de les
rassembler par un group by :
select ...
inner join
inner join
where ...
group by PPL_ID
having PERIOD.POD_REFEXT BETWEEN '200501' AND '200503'
AND PERIOD.LVL_ID!9
Le problème est que ca te fera utiliser une double jointure (que Windev
ne supporte pas) et donc il te faudra passer par un
hRequeteSansCorrection (ou alors tu transformes ca dans un where)
Pas les idées claires moi ce matin !!! Sgbd MySQL 4.0.23 pre 4.1 Soit une table PEOPLE_RESULT avec entre autre les colonnes
RES_ID Identif POD_ID Code periode PPL_ID Id people RES_VAL07 Points mois RES_VAL08 Points cumulés au mois
donc j'ai dans cette table des points mensuels, un enreg par mois POD_ID 200501,200402,200503 etc .. et par individu (PPL_ID). et la Table PERIOD POD_ID Id periode POD_REFEXT Code periode (ex '200501')
Je veux calculer et màj dans RES_VAL08 les points cumulés à ce mois, soit RES_VAL08 de 200503=Somme des points RES_VAL07 de 200501 à 200503 pour une periode de ref 200503.
Simplissime me dis-je en 1 requete cela doit être torché et je n'y arrive pas.
Pour l'instant je passe par 3 temps. 1 - fetch sur la periode 200503 (pDeb) SELECT PEOPLE_RESULT.RES_ID,PEOPLE_RESULT.PPL_ID,PEOPLE_RESULT.POD_ID FROM PEOPLE_RESULT "+... " INNER JOIN PERIOD ON PERIOD.POD_ID=PEOPLE_RESULT.POD_ID "+... " WHERE PERIOD.POD_REFEXT ="+Quote(pDeb)+" AND PERIOD.LVL_ID!9 "+... " ORDER BY PPL_ID" 2 - pour chaque PPL_ID, calcul de SELECT SUM(RES_VAL07)AS VAL08 FROM PEOPLE_RESULT INNER JOIN PERIOD ON PERIOD.POD_ID=PEOPLE_RESULT.POD_ID WHERE PERIOD.POD_REFEXT BETWEEN '200501' AND '200503' AND PERIOD.LVL_ID!9 WHERE PPL_ID="+PPL_ID 3 - update
Et franchement je pense qu'il y a mieux.
Pour les deux premieres etapes, je pense qu il est possible de les rassembler par un group by : select ... inner join inner join where ... group by PPL_ID having PERIOD.POD_REFEXT BETWEEN '200501' AND '200503' AND PERIOD.LVL_ID!9
Le problème est que ca te fera utiliser une double jointure (que Windev ne supporte pas) et donc il te faudra passer par un hRequeteSansCorrection (ou alors tu transformes ca dans un where)
Manu
jacques.trepp
ManuPavy a pensé très fort :
Roumegou Eric wrote:
Pas les idées claires moi ce matin !!! Sgbd MySQL 4.0.23 pre 4.1 Soit une table PEOPLE_RESULT avec entre autre les colonnes
RES_ID Identif POD_ID Code periode PPL_ID Id people RES_VAL07 Points mois RES_VAL08 Points cumulés au mois
donc j'ai dans cette table des points mensuels, un enreg par mois POD_ID 200501,200402,200503 etc .. et par individu (PPL_ID). et la Table PERIOD POD_ID Id periode POD_REFEXT Code periode (ex '200501')
Je veux calculer et màj dans RES_VAL08 les points cumulés à ce mois, soit RES_VAL08 de 200503=Somme des points RES_VAL07 de 200501 à 200503 pour une periode de ref 200503.
Simplissime me dis-je en 1 requete cela doit être torché et je n'y arrive pas.
Pour l'instant je passe par 3 temps. 1 - fetch sur la periode 200503 (pDeb) SELECT PEOPLE_RESULT.RES_ID,PEOPLE_RESULT.PPL_ID,PEOPLE_RESULT.POD_ID FROM PEOPLE_RESULT "+... " INNER JOIN PERIOD ON PERIOD.POD_ID=PEOPLE_RESULT.POD_ID "+... " WHERE PERIOD.POD_REFEXT ="+Quote(pDeb)+" AND PERIOD.LVL_ID!9 "+... " ORDER BY PPL_ID" 2 - pour chaque PPL_ID, calcul de SELECT SUM(RES_VAL07)AS VAL08 FROM PEOPLE_RESULT INNER JOIN PERIOD ON PERIOD.POD_ID=PEOPLE_RESULT.POD_ID WHERE PERIOD.POD_REFEXT BETWEEN '200501' AND '200503' AND PERIOD.LVL_ID!9 WHERE PPL_ID="+PPL_ID 3 - update
Et franchement je pense qu'il y a mieux.
Pour les deux premieres etapes, je pense qu il est possible de les rassembler par un group by : select ... inner join inner join where ... group by PPL_ID having PERIOD.POD_REFEXT BETWEEN '200501' AND '200503' AND PERIOD.LVL_ID!9
Le problème est que ca te fera utiliser une double jointure (que Windev ne supporte pas) et donc il te faudra passer par un hRequeteSansCorrection (ou alors tu transformes ca dans un where)
Manu
Il est hautement probable qu'Eric n'utilise pas l'accès natif de Windev ;o)
-- Jacques Trepp Albygest
ManuPavy a pensé très fort :
Roumegou Eric wrote:
Pas les idées claires moi ce matin !!!
Sgbd MySQL 4.0.23 pre 4.1
Soit une table PEOPLE_RESULT avec entre autre les colonnes
RES_ID Identif
POD_ID Code periode
PPL_ID Id people
RES_VAL07 Points mois
RES_VAL08 Points cumulés au mois
donc j'ai dans cette table des points mensuels, un enreg par mois POD_ID
200501,200402,200503 etc .. et par individu (PPL_ID).
et la Table PERIOD
POD_ID Id periode
POD_REFEXT Code periode (ex '200501')
Je veux calculer et màj dans RES_VAL08 les points cumulés à ce mois, soit
RES_VAL08 de 200503=Somme des points RES_VAL07 de 200501 à 200503 pour une
periode de ref 200503.
Simplissime me dis-je en 1 requete cela doit être torché et je n'y arrive
pas.
Pour l'instant je passe par 3 temps.
1 - fetch sur la periode 200503 (pDeb)
SELECT PEOPLE_RESULT.RES_ID,PEOPLE_RESULT.PPL_ID,PEOPLE_RESULT.POD_ID FROM
PEOPLE_RESULT "+...
" INNER JOIN PERIOD ON PERIOD.POD_ID=PEOPLE_RESULT.POD_ID "+...
" WHERE PERIOD.POD_REFEXT ="+Quote(pDeb)+" AND PERIOD.LVL_ID!9 "+...
" ORDER BY PPL_ID"
2 - pour chaque PPL_ID, calcul de
SELECT SUM(RES_VAL07)AS VAL08 FROM PEOPLE_RESULT
INNER JOIN PERIOD ON PERIOD.POD_ID=PEOPLE_RESULT.POD_ID
WHERE PERIOD.POD_REFEXT BETWEEN '200501' AND '200503' AND PERIOD.LVL_ID!9
WHERE PPL_ID="+PPL_ID
3 - update
Et franchement je pense qu'il y a mieux.
Pour les deux premieres etapes, je pense qu il est possible de les rassembler
par un group by :
select ...
inner join
inner join
where ...
group by PPL_ID
having PERIOD.POD_REFEXT BETWEEN '200501' AND '200503'
AND PERIOD.LVL_ID!9
Le problème est que ca te fera utiliser une double jointure (que Windev ne
supporte pas) et donc il te faudra passer par un hRequeteSansCorrection (ou
alors tu transformes ca dans un where)
Manu
Il est hautement probable qu'Eric n'utilise pas l'accès natif de Windev
;o)
Pas les idées claires moi ce matin !!! Sgbd MySQL 4.0.23 pre 4.1 Soit une table PEOPLE_RESULT avec entre autre les colonnes
RES_ID Identif POD_ID Code periode PPL_ID Id people RES_VAL07 Points mois RES_VAL08 Points cumulés au mois
donc j'ai dans cette table des points mensuels, un enreg par mois POD_ID 200501,200402,200503 etc .. et par individu (PPL_ID). et la Table PERIOD POD_ID Id periode POD_REFEXT Code periode (ex '200501')
Je veux calculer et màj dans RES_VAL08 les points cumulés à ce mois, soit RES_VAL08 de 200503=Somme des points RES_VAL07 de 200501 à 200503 pour une periode de ref 200503.
Simplissime me dis-je en 1 requete cela doit être torché et je n'y arrive pas.
Pour l'instant je passe par 3 temps. 1 - fetch sur la periode 200503 (pDeb) SELECT PEOPLE_RESULT.RES_ID,PEOPLE_RESULT.PPL_ID,PEOPLE_RESULT.POD_ID FROM PEOPLE_RESULT "+... " INNER JOIN PERIOD ON PERIOD.POD_ID=PEOPLE_RESULT.POD_ID "+... " WHERE PERIOD.POD_REFEXT ="+Quote(pDeb)+" AND PERIOD.LVL_ID!9 "+... " ORDER BY PPL_ID" 2 - pour chaque PPL_ID, calcul de SELECT SUM(RES_VAL07)AS VAL08 FROM PEOPLE_RESULT INNER JOIN PERIOD ON PERIOD.POD_ID=PEOPLE_RESULT.POD_ID WHERE PERIOD.POD_REFEXT BETWEEN '200501' AND '200503' AND PERIOD.LVL_ID!9 WHERE PPL_ID="+PPL_ID 3 - update
Et franchement je pense qu'il y a mieux.
Pour les deux premieres etapes, je pense qu il est possible de les rassembler par un group by : select ... inner join inner join where ... group by PPL_ID having PERIOD.POD_REFEXT BETWEEN '200501' AND '200503' AND PERIOD.LVL_ID!9
Le problème est que ca te fera utiliser une double jointure (que Windev ne supporte pas) et donc il te faudra passer par un hRequeteSansCorrection (ou alors tu transformes ca dans un where)
Manu
Il est hautement probable qu'Eric n'utilise pas l'accès natif de Windev ;o)