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 :

Création "à la volée" d'une variable qualitative


Sujet :

Développement SQL Server

  1. #1
    Membre averti Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Points : 381
    Points
    381
    Par défaut Création "à la volée" d'une variable qualitative
    Bonjour,

    Je cherche dans une procédure à obtenir une sélection se traduisant par 5 modalités basée sur des conditions sur trois ou quatre de mes variables en base, la difficulté étant que je ne peux pas faire de table temporaire.

    Pour le dire autreement, cette variable n'existe pas en base, on veut l'afficher de façon "artificielle" donc, la requête doit retourner l'identifiant d'un individu, et un "titre" basé sur les valeurs d'autres variables.

    Comment arriver à un tel résultat ?

  2. #2
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Citation Envoyé par argonath Voir le message
    Bonjour,
    Je cherche dans une procédure à obtenir une sélection se traduisant par 5 modalités basée sur des conditions sur trois ou quatre de mes variables en base, la difficulté étant que je ne peux pas faire de table temporaire.
    En quoi c'est difficile de créer de table temporaire ?

    En quoi c'est difficile de créer de variables ?

    Peux-tu montrer un bout de ton script ?

    A+
    Etienne ZINZINDOHOUE
    Billets-Articles

  3. #3
    Membre averti Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Points : 381
    Points
    381
    Par défaut
    Je ne peux justement pas créer de table temporaire c'est là toute la question ^^

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    oui je crois que ce serait bcp plus simple avec la requête sous les yeux ....
    Emmanuel T.

  5. #5
    Membre averti Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Points : 381
    Points
    381
    Par défaut
    Le problème est que je ne sais pas du tout comment l'écrire du coup, si une simple requête suffit ou si je dois faire une procédure stockée comme je le pensais au départ.

    si je devais créer une table temporaire j'y aurais la clef ( l'email ici) et une variable que je nommerais "segment" (textuelle)

    mettons que je construis le segment par des conditions sur une date que je nommerais date1 et une variable que je nommerais variable1

    j'y insérerais d'abord toutes mes adresses email,

    puis je ferais des updates du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update temp set segment='groupe 1' where email in ( select email from table1 where variable1<10 and (date1 between '01/01/2010' and '01/03/2010') )
    et enfin je n'aurais plus qu'à faire un select * sur ma table temp

    mais voilà, je ne peux pas créer de table temporaire

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Avec un case when peut-être et/ou une pseudo table de correspondance.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Select
    colonnes_de_ta_table,
    Case when variable1<10 and (date1 BETWEEN '01/01/2010' AND '01/03/2010')  then 'groupe 1'
    Case when variable1<20 and (date1 BETWEEN '01/01/2010' AND '01/04/2010')  then 'groupe 2'
    end as segment
     
    from
    Ta_table

    Exemple de pseudo table de correspondance.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Select 'groupe 1' segment , Date_debut,Date_fin,10 valeur
    union 
    Select 'toto@titi.fr', 'groupe 1', '20100101' Date_debut,'20100301' Date_fin, 20 valeur
    Select 'groupe 2', '20100102' Date_debut,'20100401' Date_fin, 30 valeur
    Select 'groupe 3', '20100101' Date_debut,'20100501'Date_fin
    a utiliser comme sous requete.
    Désolé si cela ne répond pas à ta question, mais là tu ne nous donnes pas assez d'information pour qu'on t'aide plus.
    Cordialement
    Soazig

  7. #7
    Membre averti Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Points : 381
    Points
    381
    Par défaut
    Je crois que tu as répondu parfaitement je ne connaissais pas du tout les case when.

    Désolé de ne pas avoir su être plus clair pour vous donner plus de détails, ce qui me désole surtout c'est de ne pas pouvoir faire tout simplement une procédure avec table temporaire ce qui m'aurait évité d'avoir à poser la question

    Je teste et je reviens mettre "résolu" (enfin j’espère) :p

  8. #8
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par argonath Voir le message
    Jce qui me désole surtout c'est de ne pas pouvoir faire tout simplement une procédure avec table temporaire ce qui m'aurait évité d'avoir à poser la question
    Ta question est résolue, mais un mystère demeure :
    qu'est ce qui t'empêche de créer une table temporaire ? la base est en "lecture seule" ? ou sinon, quel est le problème ?

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  9. #9
    Membre averti Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Points : 381
    Points
    381
    Par défaut
    Ah ben notre architecture de datamart est comme ça... des bases de prod en lecture seule ( peut être pas techniquement, mais dans les faits on écrit jamais "humainement" dessus) et des bases de réplications sur lesquelles on peut faire plus de choses.

  10. #10
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Jce qui me désole surtout c'est de ne pas pouvoir faire tout simplement une procédure avec table temporaire ce qui m'aurait évité d'avoir à poser la question
    Comme on vous l'a montré, vous n'avez pas besoin de créer une table temporaire.
    On ne sait pas encore pourquoi vous ne pouvez pas en créer, mais je dirai que c'est tant mieux.
    En effet, en plus de dupliquer des données dans la base de données TempDB, cela oblige à un re-calcul des statistiques de colonnes sur une table qui est assez fréquent (toutes les 6 modifications).

    Notez que vous n'avez plus besoin de ce genre de table, surtout si vous êtes sous SQL Server 2005 ou ultérieur.
    Vous pouvez intelligemment utiliser comme alternative les expressions de table commune, ou CTE.

    @++

  11. #11
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 577
    Points
    52 577
    Billets dans le blog
    5
    Par défaut
    Même si la base de données est en lecture seulement (read only) vous pouvez quand même créer des tables temporaires. En effet ces tables temporaires ne sont pas créée dans la base de production, mais dans une base système qui ne peut être read only, sinon SQL Server ne fonctionnerait plus du tout !!!

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  12. #12
    Membre averti Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Points : 381
    Points
    381
    Par défaut
    Comme on vous l'a montré, vous n'avez pas besoin de créer une table temporaire.
    Tout à fait, la solution avec les case a très bien marché et est de toute façon bien plus rapide en exécution il me semble.

    Vous pouvez intelligemment utiliser comme alternative les expressions de table commune, ou CTE.
    Ah ça je vais me pencher dessus également. Peut être une piste pour améliorer pas mal de choses que j'ai faites

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

Discussions similaires

  1. Mode d'une variable qualitative
    Par Maeho dans le forum SAS STAT
    Réponses: 6
    Dernier message: 26/10/2016, 19h51
  2. Réponses: 5
    Dernier message: 24/04/2014, 14h52
  3. Réponses: 8
    Dernier message: 03/09/2011, 17h02
  4. quotes dans une variable
    Par requiemforadream dans le forum ASP
    Réponses: 3
    Dernier message: 09/05/2005, 09h55

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