8796 sujets

Développement web côté serveur, CMS

Bonjour,

Je sollicite votre aide car j'ai une erreur comme ceci: Subquery allowed only one select list item. Je souhaite que dans la requête imbriquée, il y a un regroupement par YEAR(DTE_TRNJ),DATEPART(WEEK,DTE_TRNJ) pour obtenir les données à la même semaine que le select principal...Qu'est ce que je dois modifier dans le code pour avoir le résultat souhaité?
Voici mon code sql:


SELECT COUNT(DISTINCT UCLPRDDWH.DET_LIG_TRN.DWH_SEQ_NUM_IND), YEAR(DTE_TRNJ),DATEPART(WEEK,DTE_TRNJ)

FROM UCLPRDDWH.DET_LIG_TRN, UCLPRDDWH.DET_PDV, LDS_TMP_STATION_GEANT_TRIPLE, UCLPRDDWH.DET_PORTEUR
WHERE
UCLPRDDWH.DET_LIG_TRN.DWH_SEQ_NUM_IND = UCLPRDDWH.DET_PORTEUR.DWH_SEQ_NUM_IND
AND UCLPRDDWH.DET_PDV.COD_PDV_COM = 'CG' + RIGHT(LDS_TMP_STATION_GEANT_TRIPLE.COD_PDV_COM,3)
AND UCLPRDDWH.DET_LIG_TRN.DWH_SEQ_PDV = UCLPRDDWH.DET_PDV.DWH_SEQ_PDV
AND UCLPRDDWH.DET_LIG_TRN.DTE_TRNJ > '2008/12/31'
AND DWH_COD_TYPIND = 'A'

AND UCLPRDDWH.DET_PORTEUR.DWH_SEQ_NUM_IND IN (SELECT DISTINCT UCLPRDDWH.DET_LIG_TRN.DWH_SEQ_NUM_IND, YEAR(DTE_TRNJ),DATEPART(WEEK,DTE_TRNJ)
FROM
UCLPRDDWH.DET_LIG_TRN, UCLPRDDWH.DET_PDV, LDS_TMP_STATION_GEANT_TRIPLE, UCLPRDDWH.DET_PORTEUR
WHERE
UCLPRDDWH.DET_LIG_TRN.DWH_SEQ_NUM_IND = UCLPRDDWH.DET_PORTEUR.DWH_SEQ_NUM_IND
AND UCLPRDDWH.DET_PDV.COD_PDV_COM = LDS_TMP_STATION_GEANT_TRIPLE.COD_PDV_COM
AND UCLPRDDWH.DET_LIG_TRN.DWH_SEQ_PDV = UCLPRDDWH.DET_PDV.DWH_SEQ_PDV
AND UCLPRDDWH.DET_LIG_TRN.DTE_TRNJ > '2008/12/31'
AND DWH_COD_TYPIND = 'A' GROUP BY YEAR(DTE_TRNJ),DATEPART(WEEK,DTE_TRNJ))

GROUP BY YEAR(DTE_TRNJ),DATEPART(WEEK,DTE_TRNJ) 


Merci d'avance
Salut,

tu fais
... AND UCLPRDDWH.DET_PORTEUR.DWH_SEQ_NUM_IND IN 
(SELECT DISTINCT UCLPRDDWH.DET_LIG_TRN.DWH_SEQ_NUM_IND, YEAR(DTE_TRNJ),DATEPART(WEEK,DTE_TRNJ)
Ce qui ne peut pas fonctionner puisque tu compares une valeur avec trois.

Peut-être tout simplement
... AND UCLPRDDWH.DET_PORTEUR.DWH_SEQ_NUM_IND IN 
(SELECT DISTINCT UCLPRDDWH.DET_LIG_TRN.DWH_SEQ_NUM_IND From ...
Bonjour,

Merci beaucoup pour ta réponse, cependant j'ai une autre erreur comme ceci: Function or column reference to 'DWH_SEQ_NUM_IND' must also appear in a GROUP BY.
Bonjour,

C'est une requête qui liste toutes les personnes qui vont à la fois dans un magasin et dans une station. J'ai essayé avec Intersect mais ca ne fonctionne pas. A la base, cette requête fonctionne très bien avec les dates fixées (voir code ci-dessous). Mais je souhaite d'automatiser et actualiser par semaine donc je cherche un moyen de regrouper par semaine ...
Requête d'origine:

SELECT COUNT(DISTINCT UCLPRDDWH.DET_LIG_TRN.DWH_SEQ_NUM_IND)
FROM UCLPRDDWH.DET_LIG_TRN, UCLPRDDWH.DET_PDV, LDS_TMP_STATION_GEANT_TRIPLE, UCLPRDDWH.DET_PORTEUR
WHERE UCLPRDDWH.DET_LIG_TRN.DWH_SEQ_NUM_IND = UCLPRDDWH.DET_PORTEUR.DWH_SEQ_NUM_IND AND UCLPRDDWH.DET_PDV.COD_PDV_COM = 'CG' + RIGHT(LDS_TMP_STATION_GEANT_TRIPLE.COD_PDV_COM,3) AND UCLPRDDWH.DET_LIG_TRN.DWH_SEQ_PDV = UCLPRDDWH.DET_PDV.DWH_SEQ_PDV AND UCLPRDDWH.DET_LIG_TRN.DTE_TRNJ > '2009/02/21' AND UCLPRDDWH.DET_LIG_TRN.DTE_TRNJ < '2009/03/01' AND DWH_COD_TYPIND = 'A' AND 

UCLPRDDWH.DET_PORTEUR.DWH_SEQ_NUM_IND IN (SELECT DISTINCT UCLPRDDWH.DET_LIG_TRN.DWH_SEQ_NUM_IND
FROM UCLPRDDWH.DET_LIG_TRN, UCLPRDDWH.DET_PDV, LDS_TMP_STATION_GEANT_TRIPLE, UCLPRDDWH.DET_PORTEUR
WHERE UCLPRDDWH.DET_LIG_TRN.DWH_SEQ_NUM_IND = UCLPRDDWH.DET_PORTEUR.DWH_SEQ_NUM_IND AND UCLPRDDWH.DET_PDV.COD_PDV_COM = LDS_TMP_STATION_GEANT_TRIPLE.COD_PDV_COM AND UCLPRDDWH.DET_LIG_TRN.DWH_SEQ_PDV = UCLPRDDWH.DET_PDV.DWH_SEQ_PDV AND UCLPRDDWH.DET_LIG_TRN.DTE_TRNJ > '2009/02/21' AND UCLPRDDWH.DET_LIG_TRN.DTE_TRNJ < '2009/03/01' AND DWH_COD_TYPIND = 'A')
Cecilia a écrit :
Mais je souhaite d'automatiser et actualiser par semaine donc je cherche un moyen de regrouper par semaine ...
Sauf qu'il ne s'agit pas d'un regroupement (GROUP BY) mais d'un intervalle de temps (BETWEEN).

Je ne saisis pas trop où est la difficulté ? Il existe de nombreuses fonctions SQL sur les dates et durées...
Bonjour,

En fait, on veut les valeurs semaine après semaine. L'ancienne requête oblige les utilisateurs à changer la date d'intervalle et actualiser. J'ai alors ajouté YEAR(DTE_TRNJ),DATEPART(WEEK,DTE_TRNJ) et grouper les valeurs par semaine pour automatiser la requête. Ainsi, on a la liste des personnes qui vont à la fois dans un magasin et dans une station toutes les semaines avec condition que la date soit supérieure à '2008/12/31' pour que l'actualisation prenne moins de temps.
(Les variables ne fonctionnent pas).

Que me proposes tu si je souhaite grouper le 2e select par semaine comme le 1er?
Modifié par Cecilia (22 May 2009 - 14:26)