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] Optimisation traitement


Sujet :

MS SQL Server

  1. #1
    Membre régulier Avatar de luimême
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Points : 121
    Points
    121
    Par défaut [SQL Server 2000] Optimisation traitement
    Bonjour,

    Je souhaiterais savoir s'il est possible de faire le calcul ci-dessous en une seule requête :

    En partant d'une requête qui renvoie des données, je souhaiterais ajouter une colonne de type compteur mais de 5 en 5. C'est à dire que le compteur vaut "1" pour les 5 premières lignes, "2" pour les lignes 5 à 10, et ainsi de suite ....

    Voici un Exemple du résultat attendu :
    Les colonnes id, A et B existe déjà, le but est d'obtenir la colonne Réultat.

    id A B Résultat
    1 a1 b1 1
    2 a2 b2 1
    3 a3 b3 1
    4 a4 b4 1
    5 a5 b5 1
    6 a6 b6 2
    7 a7 b7 2
    8 a8 b8 2
    9 a9 b9 2
    10 a10 b10 2
    11 a11 b11 3



    La solution simpliste serait de créer un curseur et de parcourir toutes les lignes. Y'aurait-il un moyen de faire plus simple.

    Merci pour vos suggestions.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 839
    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 839
    Points : 52 932
    Points
    52 932
    Billets dans le blog
    5
    Par défaut
    mettez une colonne IDENTITY(0,1) par exemple CLEF. Utilisez une colonne calculée avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COL AS ((CLEF % 5) + 1)
    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE T
    (id INT NOT NULL IDENTITY(0,1),
     A VARCHAR(8),
     B  VARCHAR(8),
     Resultat AS ((id % 5) + 1))
    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/ * * * * *

  3. #3
    Membre régulier Avatar de luimême
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Points : 121
    Points
    121
    Par défaut
    C kool,
    avec quelques ajustements, ça donne ce que je voulais.

    Merci

    Voici le test que j'ai fait,
    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
    24
    25
    26
    27
     
    CREATE TABLE #T
    (id INT NOT NULL IDENTITY(1,1),
     A VARCHAR(8),
     B  VARCHAR(8)
    )
     
    INSERT INTO #T VALUES('a1','b1')
    INSERT INTO #T VALUES('a2','b2')
    INSERT INTO #T VALUES('a3','b3')
    INSERT INTO #T VALUES('a4','b4')
    INSERT INTO #T VALUES('a5','b5')
    INSERT INTO #T VALUES('a6','b6')
    INSERT INTO #T VALUES('a7','b7')
    INSERT INTO #T VALUES('a8','b8')
    INSERT INTO #T VALUES('a9','b9')
    INSERT INTO #T VALUES('a10','b10')
    INSERT INTO #T VALUES('a11','b11')
     
    SELECT
    	id, A, B, 
    	CASE WHEN (id % 5) = 0
    		THEN ((id / 5))
    		ELSE ((id / 5) + 1)
    	END
    from
    	#T

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/06/2014, 15h17
  2. Optimisation base de données SQL Server 2000: Indexation
    Par Mouckson dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 22/05/2012, 01h39
  3. Optimisation Update sur SQL SERVER 2000
    Par Hansen69 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 23/12/2007, 22h17
  4. Optimisation d'un curseur [Sql Server 2000]
    Par nox75 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 14/09/2007, 16h27
  5. Débutant : SQL Server 2000
    Par bd0606 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 27/10/2003, 11h33

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