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 :

Requête ORDER BY + SET


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 9
    Par défaut Requête ORDER BY + SET
    Bonjour à tous,

    J'ai une requête SQL de tirage au sort "random":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string sel = "SELECT TOP (" + this.nbgagnant.Text + ") nom_can, prenom_can FROM JeuxConcours.dbo." + this.Id2jeu.Text +" ORDER BY NEWID() ";
    - this.nbgagnant.Text = TextBox avec un String "Nombre de gagnant"
    - this.Id2jeu.Text = TextBox avec un String "Titre du jeu.Replace(" ", "")"

    J'aimerais transformer cette requête afin de rajouter une valeur (1) dans une colonne "gagnant".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    string sel = "SELECT TOP (" + this.nbgagnant.Text + ") nom_can, prenom_can FROM JeuxConcours.dbo." + this.Id2jeu.Text +" ORDER BY NEWID() SET gagnant = '" + 1 + "';";
    Auriez-vous une piste de solution pour moi?

    Merci d'avance.

  2. #2
    Membre éprouvé Avatar de pulsdrum
    Homme Profil pro
    MVP SQL Server - Consultant en Business Intelligence - MCITP, MCTS et MCSA SQL Server 2008/2012
    Inscrit en
    Juillet 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : MVP SQL Server - Consultant en Business Intelligence - MCITP, MCTS et MCSA SQL Server 2008/2012
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 61
    Par défaut
    Bonjour,

    Je ne suis pas sure de comprendre ce que tu souhaites faire, mais pour rajouter une colonne "gagnant" avec "1" dedans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string sel = "SELECT TOP (" + this.nbgagnant.Text + ") nom_can, prenom_can, 1 as gagnant FROM JeuxConcours.dbo." + this.Id2jeu.Text +" ORDER BY NEWID() ";
    ++

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 9
    Par défaut
    C'est presque ça, le problème c'est que l'action se passe dans une datagridview.

    En gros je fais ma requête de tirage au sort, et j'ajoute la valeur (1) dans la colonne gagnant seulement pour les lignes tirées aux sort.

    Quelque chose comme :

    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
            private void TirageAuSort_Click(object sender, EventArgs e)
            {
                try
                {
                    {
                        string sel = "SELECT TOP (" + this.nbgagnant.Text + ") nom_can, prenom_can, 1 as gagnant WHERE nom_can = '" + dataGridView1.CurrentCell + "' AND prenom_can = '" + dataGridView1.CurrentCell + "', FROM JeuxConcours.dbo." + this.Id2jeu.Text + " ORDER BY NEWID() ";
                        Console.Out.WriteLine(sel);
                        SqlConnection con = new SqlConnection("Data Source=*****;Initial Catalog=JeuxConcours;Persist Security Info=True;User ID=*****;Password=*****;");
                        SqlCommand cmd = new SqlCommand(sel, con);
                        SqlDataAdapter sda = new SqlDataAdapter(cmd);
                        DataSet ds = new DataSet();
                        sda.Fill(ds, this.TitreJeu.Text);
                        dataGridView1.DataSource = ds.Tables[this.TitreJeu.Text];
                        }
     
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

  4. #4
    Membre éprouvé Avatar de pulsdrum
    Homme Profil pro
    MVP SQL Server - Consultant en Business Intelligence - MCITP, MCTS et MCSA SQL Server 2008/2012
    Inscrit en
    Juillet 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : MVP SQL Server - Consultant en Business Intelligence - MCITP, MCTS et MCSA SQL Server 2008/2012
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 61
    Par défaut
    En effet lorsque tu places dans ta requête « 1 as gagnant » toutes les lignes auront la valeur 1 dans la colonne gagnant.

    Pour que la valeur puisse changer suivant une condition utilise l’expression CASE

    ++

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 9
    Par défaut
    Merci pour ton aide, j'ai fais un INNER JOIN à la place voici mon code pour ceux que ça intéresse:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    string sel = "UPDATE " + this.Id2jeu.Text + " SET gagnant = '1' FROM " + this.Id2jeu.Text + " u INNER JOIN (SELECT TOP (" + this.nbgagnant.Text + ") nom_can, prenom_can FROM " + this.Id2jeu.Text + " ORDER BY NEWID()) s ON u.nom_can = s.nom_can";
                        Console.Out.WriteLine(sel);
                        SqlConnection con = new SqlConnection("Data Source=*****;Initial Catalog=JeuxConcours;Persist Security Info=True;User ID=*****;Password=*****;");
                        SqlCommand cmd = new SqlCommand(sel, con);
                        con.Open();
                        cmd.ExecuteNonQuery();
                        string sel2 = "SELECT nom_can, prenom_can FROM " + this.Id2jeu.Text + " WHERE gagnant = '1'";
                        Console.Out.WriteLine(sel2);
                        SqlCommand cmd2 = new SqlCommand(sel2, con);
                        SqlDataAdapter sda = new SqlDataAdapter(cmd2);
                        DataSet ds = new DataSet();
                        sda.Fill(ds, this.TitreJeu.Text);
                        dataGridView1.DataSource = ds.Tables[this.TitreJeu.Text];
    Bonne continuation!

  6. #6
    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
    Par défaut
    Vous feriez bien d'utiliser des query paramétrés.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    com.CommandText = @"
    SELECT TOP(@top)
     *
    FROM dbo.table
    WHERE champ1 = @val1
    "
     
    com.Parameters.Add("@top", SqlDbType.Int).Value = 5
    com.Parameters.Add("@champ1 ", SqlDbType.NVarchar, 100).Value = "Bob";
    Votre code actuel est juste ignoble.

Discussions similaires

  1. Optimiser une requête ORDER BY sur une table volumineuse
    Par micaz dans le forum Administration
    Réponses: 4
    Dernier message: 19/01/2010, 01h19
  2. MySql - requête (order by) - en alternance
    Par julienleg dans le forum Requêtes
    Réponses: 11
    Dernier message: 24/04/2009, 16h57
  3. sous-requête dans le SET d'un update
    Par anikeh dans le forum Access
    Réponses: 2
    Dernier message: 26/09/2006, 16h08
  4. requéte order by double?
    Par kanzarih dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/05/2006, 20h25
  5. requête order by + group by ?
    Par isa38 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 12/07/2005, 14h42

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