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

MS SQL Server Discussion :

[SQL Server 2000] ajouter une colonne identité dans une vue?


Sujet :

MS SQL Server

  1. #1
    Membre habitué

    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 101
    Points : 141
    Points
    141
    Par défaut [SQL Server 2000] ajouter une colonne identité dans une vue?
    Bonjour, j'ai créé une vue comportant principalement des colonnes dont la valeur est calculée à partir de fonctions d'aggrégation (je ne peux donc pas l'indexer).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
     
    CREATE VIEW pointsGeographiques
    AS
    SELECT latitude, longitude, COUNT(species) AS 'specimen',
    COUNT(distinct species) AS 'species'
    FROM maTable
    GROUP BY latitude, longitude
    J'aimerais que cette vue serve de source de donnée à une application accédant à ma base de donnée via un pilote JDBC. Mais l'application en question exige que je lui fournisse le nom d'une colonne possédant une clé unique.

    Cela semble difficile de ramener un numéro de ligne courante car la clause 'ORDER BY' n'est pas reconnue dans les vues. mais il y aurait-il cependant un moyen d'ajouter l'équivalent d'une colonne identité sur une vue.

  2. #2
    Membre habitué

    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 101
    Points : 141
    Points
    141
    Par défaut
    J'ai trouvé une solution provisoire, qui me semble toutefois pas très élegante et moyennement fiable.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CREATE VIEW GeographicalPoints
    AS
     
    SELECT 
    CONVERT(nvarchar(50),latitude)+'NS'+CONVERT(nvarchar(50),longitude)+'WE' as 'COORD_KEY', 
    latitude, longitude, 
    COUNT(species) as 'specimen',
    COUNT(distinct species) as 'species'
    FROM albertine_rift_aves20040211
    GROUP BY latitude, longitude
    Je crée un doublon des colonnes reprises dans la clause 'GROUP BY' de la vue, je les convertis en string, et les concatène entre elles.
    c'ezst du bricolage, mais en principe la valeur de clé obtenue devrait être unique.
    Cependant pour des raisons de sécurité (notamment pour les arrondis des valeurs décimales lors de la conversion) et de performance, j'aimerais bien trouver une solution avec une clé basée sur une valeur numérique.

  3. #3
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 224
    Points : 19 569
    Points
    19 569
    Billets dans le blog
    25
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE VIEW pointsGeographiques
    AS
    SELECT max(VotreClePrimaire), latitude, longitude, COUNT(species) AS 'specimen',
    COUNT(distinct species) AS 'species'
    FROM maTable
    GROUP BY latitude, longitude

  4. #4
    Membre habitué

    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 101
    Points : 141
    Points
    141
    Par défaut
    Merci, cela marche bien!
    Je ne savais pas que combiné à d'autres fonctions d'aggrégations et à la clause 'ORDER BY', la fonction MAX considérait la ligne courante comme la comme dernière ligne

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/03/2015, 12h46
  2. Réponses: 3
    Dernier message: 29/03/2011, 21h38
  3. Réponses: 6
    Dernier message: 13/11/2009, 17h06
  4. Réponses: 2
    Dernier message: 08/11/2007, 11h54
  5. Réponses: 5
    Dernier message: 30/05/2007, 19h08

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