J'essaie de mettre en place une proc=E9dure stock=E9e, mais=20
j'ai un peu de mal.
Je voudrais faire un distinct sur les enregistrements =E0=20
renvoyer ainsi qu'un order by, mais Visual studio ne veut=20
pas me l'enregsitrer.
Voici ma proc=E9dure stock=E9e :=20
ALTER PROCEDURE myProc
AS
SELECT DISTINCT id2
FROM table1
WHERE date_parution<getdate()
AND id2 IN (
SELECT id
FROM table2
)
ORDER BY date_parution DESC
Quand je veux l'enregistrer il me dit Erreur ADO : ORDER=20
BY items must appear in the select list if SELECT=20
DISTINCT is specified.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Aba
Vu dans la documentation SQL : "La clause ORDER BY peut comporter des éléments qui n'apparaissent pas dans la liste de sélection. Toutefois, si SELECT DISTINCT est spécifié ou si l'instruction SELECT contient un opérateur UNION, les colonnes de tri doivent apparaître dans la liste de sélection."
SELECT DISTINCT id2, date_parution FROM table1 ORDER BY Date_parution DESC -----> fonctionne SELECT DISTINCT id2 FROM table1 ---> fonctionne
"Elo" a écrit dans le message de news:2345a01c45e7f$7329e700$ Bonjour,
J'essaie de mettre en place une procédure stockée, mais j'ai un peu de mal. Je voudrais faire un distinct sur les enregistrements à renvoyer ainsi qu'un order by, mais Visual studio ne veut pas me l'enregsitrer.
Voici ma procédure stockée :
ALTER PROCEDURE myProc
AS SELECT DISTINCT id2 FROM table1 WHERE date_parution<getdate() AND id2 IN ( SELECT id FROM table2 ) ORDER BY date_parution DESC
Quand je veux l'enregistrer il me dit Erreur ADO : ORDER BY items must appear in the select list if SELECT DISTINCT is specified.
Quelqu'un a une idée de ce qui ne va pas ?
Merci d'avance.
Elo
Vu dans la documentation SQL :
"La clause ORDER BY peut comporter des éléments qui n'apparaissent pas dans
la liste de sélection. Toutefois, si SELECT DISTINCT est spécifié ou si
l'instruction SELECT contient un opérateur UNION, les colonnes de tri
doivent apparaître dans la liste de sélection."
SELECT DISTINCT id2, date_parution FROM table1 ORDER BY Date_parution
DESC -----> fonctionne
SELECT DISTINCT id2 FROM table1 ---> fonctionne
"Elo" <anonymous@discussions.microsoft.com> a écrit dans le message de
news:2345a01c45e7f$7329e700$a301280a@phx.gbl...
Bonjour,
J'essaie de mettre en place une procédure stockée, mais
j'ai un peu de mal.
Je voudrais faire un distinct sur les enregistrements à
renvoyer ainsi qu'un order by, mais Visual studio ne veut
pas me l'enregsitrer.
Voici ma procédure stockée :
ALTER PROCEDURE myProc
AS
SELECT DISTINCT id2
FROM table1
WHERE date_parution<getdate()
AND id2 IN (
SELECT id
FROM table2
)
ORDER BY date_parution DESC
Quand je veux l'enregistrer il me dit Erreur ADO : ORDER
BY items must appear in the select list if SELECT
DISTINCT is specified.
Vu dans la documentation SQL : "La clause ORDER BY peut comporter des éléments qui n'apparaissent pas dans la liste de sélection. Toutefois, si SELECT DISTINCT est spécifié ou si l'instruction SELECT contient un opérateur UNION, les colonnes de tri doivent apparaître dans la liste de sélection."
SELECT DISTINCT id2, date_parution FROM table1 ORDER BY Date_parution DESC -----> fonctionne SELECT DISTINCT id2 FROM table1 ---> fonctionne
"Elo" a écrit dans le message de news:2345a01c45e7f$7329e700$ Bonjour,
J'essaie de mettre en place une procédure stockée, mais j'ai un peu de mal. Je voudrais faire un distinct sur les enregistrements à renvoyer ainsi qu'un order by, mais Visual studio ne veut pas me l'enregsitrer.
Voici ma procédure stockée :
ALTER PROCEDURE myProc
AS SELECT DISTINCT id2 FROM table1 WHERE date_parution<getdate() AND id2 IN ( SELECT id FROM table2 ) ORDER BY date_parution DESC
Quand je veux l'enregistrer il me dit Erreur ADO : ORDER BY items must appear in the select list if SELECT DISTINCT is specified.
Quelqu'un a une idée de ce qui ne va pas ?
Merci d'avance.
Elo
Elo
Merci pour les infos. En fait, je crois que je vais devoir rajouter une sous requete pasrce que je veux que mon distinct ne s'applique que si le champs id
Elo
-----Message d'origine----- Vu dans la documentation SQL : "La clause ORDER BY peut comporter des éléments qui
n'apparaissent pas dans
la liste de sélection. Toutefois, si SELECT DISTINCT est
spécifié ou si
l'instruction SELECT contient un opérateur UNION, les
colonnes de tri
doivent apparaître dans la liste de sélection."
SELECT DISTINCT id2, date_parution FROM table1 ORDER BY
Date_parution
DESC -----> fonctionne SELECT DISTINCT id2 FROM table1 ---> fonctionne
"Elo" a écrit dans
le message de
news:2345a01c45e7f$7329e700$ Bonjour,
J'essaie de mettre en place une procédure stockée, mais j'ai un peu de mal. Je voudrais faire un distinct sur les enregistrements à renvoyer ainsi qu'un order by, mais Visual studio ne veut pas me l'enregsitrer.
Voici ma procédure stockée :
ALTER PROCEDURE myProc
AS SELECT DISTINCT id2 FROM table1 WHERE date_parution<getdate() AND id2 IN ( SELECT id FROM table2 ) ORDER BY date_parution DESC
Quand je veux l'enregistrer il me dit Erreur ADO : ORDER BY items must appear in the select list if SELECT DISTINCT is specified.
Quelqu'un a une idée de ce qui ne va pas ?
Merci d'avance.
Elo
.
Merci pour les infos.
En fait, je crois que je vais devoir rajouter une sous
requete pasrce que je veux que mon distinct ne s'applique
que si le champs id
Elo
-----Message d'origine-----
Vu dans la documentation SQL :
"La clause ORDER BY peut comporter des éléments qui
n'apparaissent pas dans
la liste de sélection. Toutefois, si SELECT DISTINCT est
spécifié ou si
l'instruction SELECT contient un opérateur UNION, les
colonnes de tri
doivent apparaître dans la liste de sélection."
SELECT DISTINCT id2, date_parution FROM table1 ORDER BY
Date_parution
DESC -----> fonctionne
SELECT DISTINCT id2 FROM table1 ---> fonctionne
"Elo" <anonymous@discussions.microsoft.com> a écrit dans
J'essaie de mettre en place une procédure stockée, mais
j'ai un peu de mal.
Je voudrais faire un distinct sur les enregistrements à
renvoyer ainsi qu'un order by, mais Visual studio ne veut
pas me l'enregsitrer.
Voici ma procédure stockée :
ALTER PROCEDURE myProc
AS
SELECT DISTINCT id2
FROM table1
WHERE date_parution<getdate()
AND id2 IN (
SELECT id
FROM table2
)
ORDER BY date_parution DESC
Quand je veux l'enregistrer il me dit Erreur ADO : ORDER
BY items must appear in the select list if SELECT
DISTINCT is specified.
Merci pour les infos. En fait, je crois que je vais devoir rajouter une sous requete pasrce que je veux que mon distinct ne s'applique que si le champs id
Elo
-----Message d'origine----- Vu dans la documentation SQL : "La clause ORDER BY peut comporter des éléments qui
n'apparaissent pas dans
la liste de sélection. Toutefois, si SELECT DISTINCT est
spécifié ou si
l'instruction SELECT contient un opérateur UNION, les
colonnes de tri
doivent apparaître dans la liste de sélection."
SELECT DISTINCT id2, date_parution FROM table1 ORDER BY
Date_parution
DESC -----> fonctionne SELECT DISTINCT id2 FROM table1 ---> fonctionne
"Elo" a écrit dans
le message de
news:2345a01c45e7f$7329e700$ Bonjour,
J'essaie de mettre en place une procédure stockée, mais j'ai un peu de mal. Je voudrais faire un distinct sur les enregistrements à renvoyer ainsi qu'un order by, mais Visual studio ne veut pas me l'enregsitrer.
Voici ma procédure stockée :
ALTER PROCEDURE myProc
AS SELECT DISTINCT id2 FROM table1 WHERE date_parution<getdate() AND id2 IN ( SELECT id FROM table2 ) ORDER BY date_parution DESC
Quand je veux l'enregistrer il me dit Erreur ADO : ORDER BY items must appear in the select list if SELECT DISTINCT is specified.
Quelqu'un a une idée de ce qui ne va pas ?
Merci d'avance.
Elo
.
Patrice
Dès que le DISTINCT nécessite d'autres champs, penser au GROUP BY. Par exemple cela pourrait donner :
SELECT id2,MAX(Date_parution) FROM Table1 GROUP BY id2 ORDER BY 2
Le problème étant de savoir quelle est la valeur de Date_parution à prendre en compte pour des valeurs identiques de id2...
Patrice
--
"Elo" a écrit dans le message de news:2347d01c45e82$608784b0$ Merci pour les infos. En fait, je crois que je vais devoir rajouter une sous requete pasrce que je veux que mon distinct ne s'applique que si le champs id
Elo
-----Message d'origine----- Vu dans la documentation SQL : "La clause ORDER BY peut comporter des éléments qui
n'apparaissent pas dans
la liste de sélection. Toutefois, si SELECT DISTINCT est
spécifié ou si
l'instruction SELECT contient un opérateur UNION, les
colonnes de tri
doivent apparaître dans la liste de sélection."
SELECT DISTINCT id2, date_parution FROM table1 ORDER BY
Date_parution
DESC -----> fonctionne SELECT DISTINCT id2 FROM table1 ---> fonctionne
"Elo" a écrit dans
le message de
news:2345a01c45e7f$7329e700$ Bonjour,
J'essaie de mettre en place une procédure stockée, mais j'ai un peu de mal. Je voudrais faire un distinct sur les enregistrements à renvoyer ainsi qu'un order by, mais Visual studio ne veut pas me l'enregsitrer.
Voici ma procédure stockée :
ALTER PROCEDURE myProc
AS SELECT DISTINCT id2 FROM table1 WHERE date_parution<getdate() AND id2 IN ( SELECT id FROM table2 ) ORDER BY date_parution DESC
Quand je veux l'enregistrer il me dit Erreur ADO : ORDER BY items must appear in the select list if SELECT DISTINCT is specified.
Quelqu'un a une idée de ce qui ne va pas ?
Merci d'avance.
Elo
.
Dès que le DISTINCT nécessite d'autres champs, penser au GROUP BY. Par
exemple cela pourrait donner :
SELECT id2,MAX(Date_parution) FROM Table1 GROUP BY id2 ORDER BY 2
Le problème étant de savoir quelle est la valeur de Date_parution à prendre
en compte pour des valeurs identiques de id2...
Patrice
--
"Elo" <anonymous@discussions.microsoft.com> a écrit dans le message de
news:2347d01c45e82$608784b0$a301280a@phx.gbl...
Merci pour les infos.
En fait, je crois que je vais devoir rajouter une sous
requete pasrce que je veux que mon distinct ne s'applique
que si le champs id
Elo
-----Message d'origine-----
Vu dans la documentation SQL :
"La clause ORDER BY peut comporter des éléments qui
n'apparaissent pas dans
la liste de sélection. Toutefois, si SELECT DISTINCT est
spécifié ou si
l'instruction SELECT contient un opérateur UNION, les
colonnes de tri
doivent apparaître dans la liste de sélection."
SELECT DISTINCT id2, date_parution FROM table1 ORDER BY
Date_parution
DESC -----> fonctionne
SELECT DISTINCT id2 FROM table1 ---> fonctionne
"Elo" <anonymous@discussions.microsoft.com> a écrit dans
J'essaie de mettre en place une procédure stockée, mais
j'ai un peu de mal.
Je voudrais faire un distinct sur les enregistrements à
renvoyer ainsi qu'un order by, mais Visual studio ne veut
pas me l'enregsitrer.
Voici ma procédure stockée :
ALTER PROCEDURE myProc
AS
SELECT DISTINCT id2
FROM table1
WHERE date_parution<getdate()
AND id2 IN (
SELECT id
FROM table2
)
ORDER BY date_parution DESC
Quand je veux l'enregistrer il me dit Erreur ADO : ORDER
BY items must appear in the select list if SELECT
DISTINCT is specified.
Dès que le DISTINCT nécessite d'autres champs, penser au GROUP BY. Par exemple cela pourrait donner :
SELECT id2,MAX(Date_parution) FROM Table1 GROUP BY id2 ORDER BY 2
Le problème étant de savoir quelle est la valeur de Date_parution à prendre en compte pour des valeurs identiques de id2...
Patrice
--
"Elo" a écrit dans le message de news:2347d01c45e82$608784b0$ Merci pour les infos. En fait, je crois que je vais devoir rajouter une sous requete pasrce que je veux que mon distinct ne s'applique que si le champs id
Elo
-----Message d'origine----- Vu dans la documentation SQL : "La clause ORDER BY peut comporter des éléments qui
n'apparaissent pas dans
la liste de sélection. Toutefois, si SELECT DISTINCT est
spécifié ou si
l'instruction SELECT contient un opérateur UNION, les
colonnes de tri
doivent apparaître dans la liste de sélection."
SELECT DISTINCT id2, date_parution FROM table1 ORDER BY
Date_parution
DESC -----> fonctionne SELECT DISTINCT id2 FROM table1 ---> fonctionne
"Elo" a écrit dans
le message de
news:2345a01c45e7f$7329e700$ Bonjour,
J'essaie de mettre en place une procédure stockée, mais j'ai un peu de mal. Je voudrais faire un distinct sur les enregistrements à renvoyer ainsi qu'un order by, mais Visual studio ne veut pas me l'enregsitrer.
Voici ma procédure stockée :
ALTER PROCEDURE myProc
AS SELECT DISTINCT id2 FROM table1 WHERE date_parution<getdate() AND id2 IN ( SELECT id FROM table2 ) ORDER BY date_parution DESC
Quand je veux l'enregistrer il me dit Erreur ADO : ORDER BY items must appear in the select list if SELECT DISTINCT is specified.
Quelqu'un a une idée de ce qui ne va pas ?
Merci d'avance.
Elo
.
Elo
Merci pour vos conseils. Finalement après quelques recherche et un peu de bidouille j'ai réussi à faire la requête que je voulais, qui utilise un distict, un top, et le tout dépendant de la date...
Au cas où qqn se retrouverait avec le même problème que moi, je vous mets ma proc stockée :
SELECT TOP 3 id1 FROM table1 WHERE id1 IN( SELECT DISTINCT id1 FROM table1 WHERE date_parution<getdate() AND id1 IN ( SELECT id2 FROM table2 WHERE actif!=0 ) ) ORDER BY date_parution DESC
Elo.
-----Message d'origine----- Dès que le DISTINCT nécessite d'autres champs, penser au
GROUP BY. Par
exemple cela pourrait donner :
SELECT id2,MAX(Date_parution) FROM Table1 GROUP BY id2
ORDER BY 2
Le problème étant de savoir quelle est la valeur de
Date_parution à prendre
en compte pour des valeurs identiques de id2...
Patrice
--
"Elo" a écrit dans
le message de
news:2347d01c45e82$608784b0$ Merci pour les infos. En fait, je crois que je vais devoir rajouter une sous requete pasrce que je veux que mon distinct ne s'applique que si le champs id
Elo
-----Message d'origine----- Vu dans la documentation SQL : "La clause ORDER BY peut comporter des éléments qui
n'apparaissent pas dans
la liste de sélection. Toutefois, si SELECT DISTINCT est
spécifié ou si
l'instruction SELECT contient un opérateur UNION, les
colonnes de tri
doivent apparaître dans la liste de sélection."
SELECT DISTINCT id2, date_parution FROM table1 ORDER BY
Date_parution
DESC -----> fonctionne SELECT DISTINCT id2 FROM table1 ---> fonctionne
"Elo" a écrit dans
le message de
news:2345a01c45e7f$7329e700$ Bonjour,
J'essaie de mettre en place une procédure stockée, mais j'ai un peu de mal. Je voudrais faire un distinct sur les enregistrements à renvoyer ainsi qu'un order by, mais Visual studio ne
veut
pas me l'enregsitrer.
Voici ma procédure stockée :
ALTER PROCEDURE myProc
AS SELECT DISTINCT id2 FROM table1 WHERE date_parution<getdate() AND id2 IN ( SELECT id FROM table2 ) ORDER BY date_parution DESC
Quand je veux l'enregistrer il me dit Erreur ADO : ORDER BY items must appear in the select list if SELECT DISTINCT is specified.
Quelqu'un a une idée de ce qui ne va pas ?
Merci d'avance.
Elo
.
.
Merci pour vos conseils.
Finalement après quelques recherche et un peu de
bidouille j'ai réussi à faire la requête que je voulais,
qui utilise un distict, un top, et le tout dépendant de
la date...
Au cas où qqn se retrouverait avec le même problème que
moi, je vous mets ma proc stockée :
SELECT TOP 3 id1
FROM table1
WHERE id1 IN(
SELECT DISTINCT id1
FROM table1
WHERE date_parution<getdate()
AND id1 IN (
SELECT id2
FROM table2
WHERE actif!=0
)
)
ORDER BY date_parution DESC
Elo.
-----Message d'origine-----
Dès que le DISTINCT nécessite d'autres champs, penser au
GROUP BY. Par
exemple cela pourrait donner :
SELECT id2,MAX(Date_parution) FROM Table1 GROUP BY id2
ORDER BY 2
Le problème étant de savoir quelle est la valeur de
Date_parution à prendre
en compte pour des valeurs identiques de id2...
Patrice
--
"Elo" <anonymous@discussions.microsoft.com> a écrit dans
le message de
news:2347d01c45e82$608784b0$a301280a@phx.gbl...
Merci pour les infos.
En fait, je crois que je vais devoir rajouter une sous
requete pasrce que je veux que mon distinct ne s'applique
que si le champs id
Elo
-----Message d'origine-----
Vu dans la documentation SQL :
"La clause ORDER BY peut comporter des éléments qui
n'apparaissent pas dans
la liste de sélection. Toutefois, si SELECT DISTINCT est
spécifié ou si
l'instruction SELECT contient un opérateur UNION, les
colonnes de tri
doivent apparaître dans la liste de sélection."
SELECT DISTINCT id2, date_parution FROM table1 ORDER BY
Date_parution
DESC -----> fonctionne
SELECT DISTINCT id2 FROM table1 ---> fonctionne
"Elo" <anonymous@discussions.microsoft.com> a écrit dans
J'essaie de mettre en place une procédure stockée, mais
j'ai un peu de mal.
Je voudrais faire un distinct sur les enregistrements à
renvoyer ainsi qu'un order by, mais Visual studio ne
veut
pas me l'enregsitrer.
Voici ma procédure stockée :
ALTER PROCEDURE myProc
AS
SELECT DISTINCT id2
FROM table1
WHERE date_parution<getdate()
AND id2 IN (
SELECT id
FROM table2
)
ORDER BY date_parution DESC
Quand je veux l'enregistrer il me dit Erreur ADO : ORDER
BY items must appear in the select list if SELECT
DISTINCT is specified.
Merci pour vos conseils. Finalement après quelques recherche et un peu de bidouille j'ai réussi à faire la requête que je voulais, qui utilise un distict, un top, et le tout dépendant de la date...
Au cas où qqn se retrouverait avec le même problème que moi, je vous mets ma proc stockée :
SELECT TOP 3 id1 FROM table1 WHERE id1 IN( SELECT DISTINCT id1 FROM table1 WHERE date_parution<getdate() AND id1 IN ( SELECT id2 FROM table2 WHERE actif!=0 ) ) ORDER BY date_parution DESC
Elo.
-----Message d'origine----- Dès que le DISTINCT nécessite d'autres champs, penser au
GROUP BY. Par
exemple cela pourrait donner :
SELECT id2,MAX(Date_parution) FROM Table1 GROUP BY id2
ORDER BY 2
Le problème étant de savoir quelle est la valeur de
Date_parution à prendre
en compte pour des valeurs identiques de id2...
Patrice
--
"Elo" a écrit dans
le message de
news:2347d01c45e82$608784b0$ Merci pour les infos. En fait, je crois que je vais devoir rajouter une sous requete pasrce que je veux que mon distinct ne s'applique que si le champs id
Elo
-----Message d'origine----- Vu dans la documentation SQL : "La clause ORDER BY peut comporter des éléments qui
n'apparaissent pas dans
la liste de sélection. Toutefois, si SELECT DISTINCT est
spécifié ou si
l'instruction SELECT contient un opérateur UNION, les
colonnes de tri
doivent apparaître dans la liste de sélection."
SELECT DISTINCT id2, date_parution FROM table1 ORDER BY
Date_parution
DESC -----> fonctionne SELECT DISTINCT id2 FROM table1 ---> fonctionne
"Elo" a écrit dans
le message de
news:2345a01c45e7f$7329e700$ Bonjour,
J'essaie de mettre en place une procédure stockée, mais j'ai un peu de mal. Je voudrais faire un distinct sur les enregistrements à renvoyer ainsi qu'un order by, mais Visual studio ne
veut
pas me l'enregsitrer.
Voici ma procédure stockée :
ALTER PROCEDURE myProc
AS SELECT DISTINCT id2 FROM table1 WHERE date_parution<getdate() AND id2 IN ( SELECT id FROM table2 ) ORDER BY date_parution DESC
Quand je veux l'enregistrer il me dit Erreur ADO : ORDER BY items must appear in the select list if SELECT DISTINCT is specified.
Quelqu'un a une idée de ce qui ne va pas ?
Merci d'avance.
Elo
.
.
Sylvain Lafontaine
En quoi la structure de votre requête est-elle supérieure à celle proposée par Aba? Vous devriez relire attentivement son message et celui de Patrice pour comprendre ce qui se passe vraiment.
De plus, non seulement l'utilisation de la clause DISTINCT en remplacement d'un Group By m'apparaît suspecte dans votre cas mais l'utilisation de la clause IN (en remplacement d'une clause JOIN entre les tables 1 et 2 par exemple) l'est tout autant à mes yeux.
S. L.
"Elo" wrote in message news:239d801c45ea5$edca9d30$ Merci pour vos conseils. Finalement après quelques recherche et un peu de bidouille j'ai réussi à faire la requête que je voulais, qui utilise un distict, un top, et le tout dépendant de la date...
Au cas où qqn se retrouverait avec le même problème que moi, je vous mets ma proc stockée :
SELECT TOP 3 id1 FROM table1 WHERE id1 IN( SELECT DISTINCT id1 FROM table1 WHERE date_parution<getdate() AND id1 IN ( SELECT id2 FROM table2 WHERE actif!=0 ) ) ORDER BY date_parution DESC
Elo.
-----Message d'origine----- Dès que le DISTINCT nécessite d'autres champs, penser au
GROUP BY. Par
exemple cela pourrait donner :
SELECT id2,MAX(Date_parution) FROM Table1 GROUP BY id2
ORDER BY 2
Le problème étant de savoir quelle est la valeur de
Date_parution à prendre
en compte pour des valeurs identiques de id2...
Patrice
--
"Elo" a écrit dans
le message de
news:2347d01c45e82$608784b0$ Merci pour les infos. En fait, je crois que je vais devoir rajouter une sous requete pasrce que je veux que mon distinct ne s'applique que si le champs id
Elo
-----Message d'origine----- Vu dans la documentation SQL : "La clause ORDER BY peut comporter des éléments qui
n'apparaissent pas dans
la liste de sélection. Toutefois, si SELECT DISTINCT est
spécifié ou si
l'instruction SELECT contient un opérateur UNION, les
colonnes de tri
doivent apparaître dans la liste de sélection."
SELECT DISTINCT id2, date_parution FROM table1 ORDER BY
Date_parution
DESC -----> fonctionne SELECT DISTINCT id2 FROM table1 ---> fonctionne
"Elo" a écrit dans
le message de
news:2345a01c45e7f$7329e700$ Bonjour,
J'essaie de mettre en place une procédure stockée, mais j'ai un peu de mal. Je voudrais faire un distinct sur les enregistrements à renvoyer ainsi qu'un order by, mais Visual studio ne
veut
pas me l'enregsitrer.
Voici ma procédure stockée :
ALTER PROCEDURE myProc
AS SELECT DISTINCT id2 FROM table1 WHERE date_parution<getdate() AND id2 IN ( SELECT id FROM table2 ) ORDER BY date_parution DESC
Quand je veux l'enregistrer il me dit Erreur ADO : ORDER BY items must appear in the select list if SELECT DISTINCT is specified.
Quelqu'un a une idée de ce qui ne va pas ?
Merci d'avance.
Elo
.
.
En quoi la structure de votre requête est-elle supérieure à celle proposée
par Aba? Vous devriez relire attentivement son message et celui de Patrice
pour comprendre ce qui se passe vraiment.
De plus, non seulement l'utilisation de la clause DISTINCT en remplacement
d'un Group By m'apparaît suspecte dans votre cas mais l'utilisation de la
clause IN (en remplacement d'une clause JOIN entre les tables 1 et 2 par
exemple) l'est tout autant à mes yeux.
S. L.
"Elo" <anonymous@discussions.microsoft.com> wrote in message
news:239d801c45ea5$edca9d30$a401280a@phx.gbl...
Merci pour vos conseils.
Finalement après quelques recherche et un peu de
bidouille j'ai réussi à faire la requête que je voulais,
qui utilise un distict, un top, et le tout dépendant de
la date...
Au cas où qqn se retrouverait avec le même problème que
moi, je vous mets ma proc stockée :
SELECT TOP 3 id1
FROM table1
WHERE id1 IN(
SELECT DISTINCT id1
FROM table1
WHERE date_parution<getdate()
AND id1 IN (
SELECT id2
FROM table2
WHERE actif!=0
)
)
ORDER BY date_parution DESC
Elo.
-----Message d'origine-----
Dès que le DISTINCT nécessite d'autres champs, penser au
GROUP BY. Par
exemple cela pourrait donner :
SELECT id2,MAX(Date_parution) FROM Table1 GROUP BY id2
ORDER BY 2
Le problème étant de savoir quelle est la valeur de
Date_parution à prendre
en compte pour des valeurs identiques de id2...
Patrice
--
"Elo" <anonymous@discussions.microsoft.com> a écrit dans
le message de
news:2347d01c45e82$608784b0$a301280a@phx.gbl...
Merci pour les infos.
En fait, je crois que je vais devoir rajouter une sous
requete pasrce que je veux que mon distinct ne s'applique
que si le champs id
Elo
-----Message d'origine-----
Vu dans la documentation SQL :
"La clause ORDER BY peut comporter des éléments qui
n'apparaissent pas dans
la liste de sélection. Toutefois, si SELECT DISTINCT est
spécifié ou si
l'instruction SELECT contient un opérateur UNION, les
colonnes de tri
doivent apparaître dans la liste de sélection."
SELECT DISTINCT id2, date_parution FROM table1 ORDER BY
Date_parution
DESC -----> fonctionne
SELECT DISTINCT id2 FROM table1 ---> fonctionne
"Elo" <anonymous@discussions.microsoft.com> a écrit dans
J'essaie de mettre en place une procédure stockée, mais
j'ai un peu de mal.
Je voudrais faire un distinct sur les enregistrements à
renvoyer ainsi qu'un order by, mais Visual studio ne
veut
pas me l'enregsitrer.
Voici ma procédure stockée :
ALTER PROCEDURE myProc
AS
SELECT DISTINCT id2
FROM table1
WHERE date_parution<getdate()
AND id2 IN (
SELECT id
FROM table2
)
ORDER BY date_parution DESC
Quand je veux l'enregistrer il me dit Erreur ADO : ORDER
BY items must appear in the select list if SELECT
DISTINCT is specified.
En quoi la structure de votre requête est-elle supérieure à celle proposée par Aba? Vous devriez relire attentivement son message et celui de Patrice pour comprendre ce qui se passe vraiment.
De plus, non seulement l'utilisation de la clause DISTINCT en remplacement d'un Group By m'apparaît suspecte dans votre cas mais l'utilisation de la clause IN (en remplacement d'une clause JOIN entre les tables 1 et 2 par exemple) l'est tout autant à mes yeux.
S. L.
"Elo" wrote in message news:239d801c45ea5$edca9d30$ Merci pour vos conseils. Finalement après quelques recherche et un peu de bidouille j'ai réussi à faire la requête que je voulais, qui utilise un distict, un top, et le tout dépendant de la date...
Au cas où qqn se retrouverait avec le même problème que moi, je vous mets ma proc stockée :
SELECT TOP 3 id1 FROM table1 WHERE id1 IN( SELECT DISTINCT id1 FROM table1 WHERE date_parution<getdate() AND id1 IN ( SELECT id2 FROM table2 WHERE actif!=0 ) ) ORDER BY date_parution DESC
Elo.
-----Message d'origine----- Dès que le DISTINCT nécessite d'autres champs, penser au
GROUP BY. Par
exemple cela pourrait donner :
SELECT id2,MAX(Date_parution) FROM Table1 GROUP BY id2
ORDER BY 2
Le problème étant de savoir quelle est la valeur de
Date_parution à prendre
en compte pour des valeurs identiques de id2...
Patrice
--
"Elo" a écrit dans
le message de
news:2347d01c45e82$608784b0$ Merci pour les infos. En fait, je crois que je vais devoir rajouter une sous requete pasrce que je veux que mon distinct ne s'applique que si le champs id
Elo
-----Message d'origine----- Vu dans la documentation SQL : "La clause ORDER BY peut comporter des éléments qui
n'apparaissent pas dans
la liste de sélection. Toutefois, si SELECT DISTINCT est
spécifié ou si
l'instruction SELECT contient un opérateur UNION, les
colonnes de tri
doivent apparaître dans la liste de sélection."
SELECT DISTINCT id2, date_parution FROM table1 ORDER BY
Date_parution
DESC -----> fonctionne SELECT DISTINCT id2 FROM table1 ---> fonctionne
"Elo" a écrit dans
le message de
news:2345a01c45e7f$7329e700$ Bonjour,
J'essaie de mettre en place une procédure stockée, mais j'ai un peu de mal. Je voudrais faire un distinct sur les enregistrements à renvoyer ainsi qu'un order by, mais Visual studio ne
veut
pas me l'enregsitrer.
Voici ma procédure stockée :
ALTER PROCEDURE myProc
AS SELECT DISTINCT id2 FROM table1 WHERE date_parution<getdate() AND id2 IN ( SELECT id FROM table2 ) ORDER BY date_parution DESC
Quand je veux l'enregistrer il me dit Erreur ADO : ORDER BY items must appear in the select list if SELECT DISTINCT is specified.
Quelqu'un a une idée de ce qui ne va pas ?
Merci d'avance.
Elo
.
.
Cedric
Les clauses DISTINCT ne sont pas vraiment optimisées en terme de performances... Et les clauses IN idem !
La clause IN peut être évitée par l'utilisation d'une simple jointure, le cas échéant, ou si ce n'est pas possible, par l'utilisation d'une vue intermédiaire.
Ainsi ta requête pourrait être
SELECT TOP 3 id1 FROM table1 INNER JOIN table2 ON table1.id1 = table2.id2 GROUP BY id1 HAVING table2.actif!=0 AND table1.date_parution<getdate()
Bon, syntaxe à vérifier, évidemment (j'ai écrit ça à l'arrache ;-))
Bon courage
Les clauses DISTINCT ne sont pas vraiment optimisées en terme de
performances... Et les clauses IN idem !
La clause IN peut être évitée par l'utilisation d'une simple jointure, le
cas échéant, ou si ce n'est pas possible, par l'utilisation d'une vue
intermédiaire.
Ainsi ta requête pourrait être
SELECT TOP 3 id1
FROM table1 INNER JOIN table2
ON table1.id1 = table2.id2
GROUP BY
id1
HAVING
table2.actif!=0 AND
table1.date_parution<getdate()
Bon, syntaxe à vérifier, évidemment (j'ai écrit ça à l'arrache ;-))
Les clauses DISTINCT ne sont pas vraiment optimisées en terme de performances... Et les clauses IN idem !
La clause IN peut être évitée par l'utilisation d'une simple jointure, le cas échéant, ou si ce n'est pas possible, par l'utilisation d'une vue intermédiaire.
Ainsi ta requête pourrait être
SELECT TOP 3 id1 FROM table1 INNER JOIN table2 ON table1.id1 = table2.id2 GROUP BY id1 HAVING table2.actif!=0 AND table1.date_parution<getdate()
Bon, syntaxe à vérifier, évidemment (j'ai écrit ça à l'arrache ;-))