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 :

Probleme requete imbriquee


Sujet :

Développement SQL Server

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Finlande

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Probleme requete imbriquee
    Bonjour,

    Apres avoir parcouru Google en long et en large, je vous expose mon probleme. Voici tout d'abord le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT
    'P'+CAST(ROW_NUMBER ( ) over (ORDER BY CAST(RIGHT(T1.COLUMN_NAME, 4) as Integer) ASC) as Varchar) as PERIOD,
    T1.COLUMN_NAME As FIELDS,
    (SELECT TOP 1 T1.COLUMN_NAME FROM GL100112) As DATE
    FROM
    INFORMATION_SCHEMA.COLUMNS as T1
    WHERE (T1.TABLE_NAME='GL100112')
    AND (CAST(RIGHT(T1.COLUMN_NAME, 4) as Integer) % 2 > 0)
    AND (CAST(RIGHT(T1.COLUMN_NAME, 4) as Integer) between 9 and 31)
    Le probleme dans mon cas est que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    T1.COLUMN_NAME As FIELDS"
    renvoie exactement la meme chose que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (SELECT TOP 1 T1.COLUMN_NAME FROM GL100112) As DATE
    Pourquoi T1.COLUMN_NAME n'est pas interprete dans la requete ?

    Merci d'avance,

    Cordialement.

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Citation Envoyé par julperr Voir le message
    Bonjour,

    Apres avoir parcouru Google en long et en large, je vous expose mon probleme. Voici tout d'abord le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT
    'P'+CAST(ROW_NUMBER ( ) over (ORDER BY CAST(RIGHT(T1.COLUMN_NAME, 4) as Integer) ASC) as Varchar) as PERIOD,
    T1.COLUMN_NAME As FIELDS,
    (SELECT TOP 1 T1.COLUMN_NAME FROM GL100112) As DATE
    FROM
    INFORMATION_SCHEMA.COLUMNS as T1
    WHERE (T1.TABLE_NAME='GL100112')
    AND (CAST(RIGHT(T1.COLUMN_NAME, 4) as Integer) % 2 > 0)
    AND (CAST(RIGHT(T1.COLUMN_NAME, 4) as Integer) between 9 and 31)
    Le probleme dans mon cas est que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    T1.COLUMN_NAME As FIELDS"
    renvoie exactement la meme chose que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (SELECT TOP 1 T1.COLUMN_NAME FROM GL100112) As DATE
    Pourquoi T1.COLUMN_NAME n'est pas interprete dans la requete ?

    Merci d'avance,

    Cordialement.
    T1.COLUMN_NAME = T1.COLUMN_NAME

    votre sous query (SELECT TOP 1 T1.COLUMN_NAME FROM GL100112) ne fait rien d'autre que renvoyer T1.COLUMN_NAME en parcourant pour de faux GL100112.
    Most Valued Pas mvp

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Finlande

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Avant tout merci d'avoir pris le temps de repondre.

    N'y a t-il pas moyen de forcer l'interpretation de ce champs ? Car en l'occurrence, c'est comme si je faisais un "select" sur une chaine de caracteres.

    En clair , j'aimerais que "Date" soit le resultat d'une sous requete (je ne sais pas si j'explique bien ...)

    Cordialement.

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Citation Envoyé par julperr Voir le message
    Avant tout merci d'avoir pris le temps de repondre.

    N'y a t-il pas moyen de forcer l'interpretation de ce champs ? Car en l'occurrence, c'est comme si je faisais un "select" sur une chaine de caracteres.

    En clair , j'aimerais que "Date" soit le resultat d'une sous requete (je ne sais pas si j'explique bien ...)

    Cordialement.
    Que souhaitez-vous obtenir de cette sous-requête ? Un champ qui ne soit pas de votre table GL100112 ?
    Most Valued Pas mvp

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Finlande

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    En gros j'ai une table de cette structure :



    ou :
    RD -> Random Data
    D -> Date (potentiellement interessant)

    Je souhaite donc recuperer toutes les dates entre GL9 & GL31.

    De fait, j'ai donc pense a parcourir la table des champs pour obtenir un resultat "vertical" (de facon a etre exploite par la suite) ou sont seulement selectionnes les champs qui m'interessent (les dates).

    En gros mon resultat serait :
    Periode1 (GL9) Date1
    Periode2 (GL11) Date2
    Periode3 (GL13) Date3
    ...
    Periode12 (GL31) Date12

    Voila, j'espere que vous comprendrez ou je veux en venir ... (finalement, ce n'est ni plus ni mois qu'une transpose avec une liste de champs restreints ...)

    Cordialement.

    EDIT : Les champs de la table sont au format GL00XX, d'ou le right dans la requete.
    Images attachées Images attachées  

  6. #6
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    en gros vous voudriez pallier votre mauvaise modélisation pour avoir un résultat sous la forme:

    G1;D1
    G2; D2
    ...
    GL11;Date3
    ?
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Est-ce qu'il vous est nécessaire d'avoir un query dynamique ?
    Most Valued Pas mvp

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Finlande

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par iberserk Voir le message
    en gros vous voudriez pallier votre mauvaise modélisation
    Ahah, je ne suis pas le createur de cette horreur. Mais sinon, oui c'est bien cette forme que je souhaiterais avoir.

    @Sergejack: Je ne pense pas avoir les droits pour lancer ce genre de query.

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Je pense que vous feriez bien de créer une view ou, si vous n'avez pas les droits, d'employer une CTE.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT
     GL9 AS [Date]
     , 1 AS [Period] 
    FROM GL100112
    UNION ALL
    SELECT
     GL10
     , 2 AS [Period]
    FROM GL100112
    ...
    Vous pouvez d'ailleurs écrire cette requête avec UNPIVOT mais les performances risqueraient d'être moindres.
    Most Valued Pas mvp

  10. #10
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Finlande

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Mes droits sont tres limites (seulement lecture).

    J'avais deja pense a la solution avec un assemblage de clauses "UNION". Ca fonctionne, cependant, je trouve ca peu elegant ...

    Utiliser un pivot me semblait mieux, mais comme vous le soulignez, assez lourd.

    Je ne connais pas les CTE, mais d'apres ce que je viens de voir, il faut des droits entendus pour utiliser ce genre d'instructions. Au vu de la policy en vigeur dans mon entreprise, je vais favoriser quelque chose de plus simple.

    Au final, je vais quand meme tenter la requete en pivot ...

    En tout cas, merci de vos reponses !

  11. #11
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Votre nombre de colonne est-elle fixe?

    Un peu dans la même idée que celle proposée par SergeJack:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    SELECT T,
    CASE T
         WHEN 1 THEN G.D1
         WHEN 2 THEN G.D2
         WHEN 3 THEN G.D3
         WHEN 4 THEN G.D4
         WHEN 5 THEN G.D5
         WHEN 6 THEN G.D6
    FROM GL100112 G
    CROSS JOIN
    (
    SELECT 1 Col
    UNION ALL
    SELECT 2 Col
    UNION ALL 
    SELECT 3 Col
    UNION ALL
    SELECT 4 Col
    UNION ALL 
    SELECT 5 Col
    UNION ALL 
    SELECT 6 Col
    )T
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  12. #12
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Finlande

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Oui, de GL9 a GL32.

Discussions similaires

  1. [requete SQL] Probleme requete UPDATE
    Par Shiryu44 dans le forum JDBC
    Réponses: 12
    Dernier message: 10/03/2005, 11h41
  2. probleme requete update
    Par Amandine62 dans le forum ASP
    Réponses: 12
    Dernier message: 27/01/2005, 11h15
  3. probleme requete
    Par voyageur dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 06/11/2004, 21h43
  4. Réponses: 3
    Dernier message: 17/05/2004, 17h28
  5. PROBLEME DE REQUETE IMBRIQUEE
    Par fleuve007 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 31/12/2003, 15h33

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