IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Problème curseur sql server 2008 r2 [2008R2]


Sujet :

Développement SQL Server

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 23
    Points : 27
    Points
    27
    Par défaut Problème curseur sql server 2008 r2
    Bonjour à tous

    Je suis actuellement en stage et je manipule SQL server, qui est tout à fait nouveau pour moi. De fait, je tente de lire davantage de documentation afin de comprendre et pouvoir mettre en application ce qui m'est demandé.
    Néanmoins, je bloque actuellement et je ne trouve pas de réponse.
    J'aurais besoin de faire un curseur pour compter le nombre de fois que le couple productid1 et productid2 se réalise.
    Voici dans un premier temps afin que vous puissiez comprendre mon raisonnement mes requêtes (tables) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select A.userIdLocal,A.comRef,B.timeID,B.productID into #TMP_USERORDER from
    (select userIdLocal,targetValue as comRef from tmp_factproductorder$ group by userIdLocal,targetValue ) A
    inner join
    (select timeID, productId,substring(comRef,4,50) as comRef from factcustomerinvoices where siteID='FB'
    ) B  on A.comRef=B.comRef
    Qui donne : useridlocal | comref | timeid | productid


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    --#temp_user_order :
    select V.timeId as timeid1,V.productID as productid1, O.timeID as timeid2,O.productId as productid2 from
    	(select useridlocal
    	,  convert(varchar(8),dateadd(day,datevisite/(60*60*24),cast('19700101' as datetime)),112) as timeId
    	, targetValue  as productId from tmp_matrice_base ) V
    	inner join #TMP_USERORDER O
    on  V.useridlocal = O.useridlocal
    and V.TimeID <= O.TimeID
    Qui donne : timeid1 |productid1| timeid2 | productid2

    Je vous donnes le schéma des tables qui sont dans mes requêtes :
    tmp_factproductorder$ : useridlocal | targetvalue
    factcustomerinvoices : TimeId| Date | Datecom |...| SiteID | Comref |...........
    tmp_matrice_base : useridlocal | datevisite | targetvalue | date | ordre | position

    J'ai réussi à faire les requêtes qu'on m'a demandé mais je bloque vraiment pour cette histoire de curseur.
    Si vous avez une solution pour remédier à ce problème je suis preneur car je ne maîtrise pas assez sql server malheureusement (mais je persiste ^^ )

    En espérant avoir été clair, merci d'avance à ceux qui tenterons de m'aider


  2. #2
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 674
    Points
    674
    Par défaut
    Bonjour,

    Je pense que dans votre cas un curseur n'est peut etre pas la meilleure solution ( quand on peut éviter les boucles en BDD c'est mieux )

    Par contre peut etre que le CTE vous correspondrait mieux :

    http://sqlpro.developpez.com/cours/s...te-recursives/

    Au besoin essayez de nous mettre ce que vous cherchez en resultat on essaiera de vous aiguiller sur la requete a effectuer et sur ce qui est possible de faire.

    Sinon vous avez peut etre cette solution la (si j'ai bien compris votre demande) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    SELECT count(*) as nb 
    FROM 
    	(SELECT useridlocal
    	,  convert(varchar(8),dateadd(day,datevisite/(60*60*24),cast('19700101' as datetime)),112) as timeId
    	, targetValue  as productId 
            FROM  tmp_matrice_base ) V
     
    INNER JOIN #TMP_USERORDER O
    ON  V.useridlocal = O.useridlocal
    AND  V.TimeID <= O.TimeID
    GROUP BY V.timeId ,O.timeID
    Qu'en pensez vous ?
    MCSA SQL SERVER |MCT | MVP Data Platform

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 23
    Points : 27
    Points
    27
    Par défaut
    Bonjour et merci de votre réponse.

    J'ai en effet laissé tomber l'idée du curseur et privilégié cette solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    create table TMP_PRODUCT_ORDER (productid1 varchar(50), productid2 varchar(50), nb int null)
    truncate table TMP_PRODUCT_ORDER
    insert into TMP_PRODUCT_ORDER select productid1, productid2 , count(*) as nb from #temp_user_order
        group by productid1, productid2
        order by productid1, productid2
    J'ai supprimé l'une de mes tables temporaires et créé une table "réelle".
    Le résultat était au rendez-vous

    Ca revient approximativement à ce que vous m'aviez proposé comme solution.
    Merci beaucoup en tout cas.

    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problèmes avec sql server 2008
    Par chris22 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 07/04/2010, 17h22
  2. Problème avec SQL SERVER 2008
    Par DrMabuse dans le forum Administration
    Réponses: 2
    Dernier message: 31/03/2010, 18h20
  3. Problème autorisation sql server 2008
    Par Mickael2604 dans le forum Administration
    Réponses: 7
    Dernier message: 05/03/2010, 19h05
  4. problème installation sql server 2008
    Par fasyr dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 06/12/2008, 13h11
  5. Problème Curseur SQL SERVER
    Par Yanmeunier dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 07/12/2005, 19h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo