Bonjour,
J'ai constaté que sous SqlServer, il n'était pas possible de faire de
"group
by" en indiquant un n° de colonne.
Exemple (complètement débile, mais juste pour qu'on parle de la même
chose)
SELECT col1, sum(x) from table group by 2
j'ai essayé de mettre des alias sur les colonnes de type agrégat, mais
rien
à faire.
Une solution ??
Merci
Bonjour,
J'ai constaté que sous SqlServer, il n'était pas possible de faire de
"group
by" en indiquant un n° de colonne.
Exemple (complètement débile, mais juste pour qu'on parle de la même
chose)
SELECT col1, sum(x) from table group by 2
j'ai essayé de mettre des alias sur les colonnes de type agrégat, mais
rien
à faire.
Une solution ??
Merci
Bonjour,
J'ai constaté que sous SqlServer, il n'était pas possible de faire de
"group
by" en indiquant un n° de colonne.
Exemple (complètement débile, mais juste pour qu'on parle de la même
chose)
SELECT col1, sum(x) from table group by 2
j'ai essayé de mettre des alias sur les colonnes de type agrégat, mais
rien
à faire.
Une solution ??
Merci
Bonjour,
J'ai constaté que sous SqlServer, il n'était pas possible de faire de "group
by" en indiquant un n° de colonne.
Exemple (complètement débile, mais juste pour qu'on parle de la même chose)
SELECT col1, sum(x) from table group by 2
j'ai essayé de mettre des alias sur les colonnes de type agrégat, mais rien
à faire.
Une solution ??
Merci
Bonjour,
J'ai constaté que sous SqlServer, il n'était pas possible de faire de "group
by" en indiquant un n° de colonne.
Exemple (complètement débile, mais juste pour qu'on parle de la même chose)
SELECT col1, sum(x) from table group by 2
j'ai essayé de mettre des alias sur les colonnes de type agrégat, mais rien
à faire.
Une solution ??
Merci
Bonjour,
J'ai constaté que sous SqlServer, il n'était pas possible de faire de "group
by" en indiquant un n° de colonne.
Exemple (complètement débile, mais juste pour qu'on parle de la même chose)
SELECT col1, sum(x) from table group by 2
j'ai essayé de mettre des alias sur les colonnes de type agrégat, mais rien
à faire.
Une solution ??
Merci
Je viens de faire un essai en 2000. Je dirais que c'est justement parce
le group by utilise nécessairement un nom de colonne (et n'accepte donc
les alias), contrairement au order by.
A priori on peut approcher cela avec une sous-requête mais cela donne bien
sûr quelque chose de plus compliqué. Quel est le problème que pose
l'utilisation du nom de la colonne ?
Je viens de faire un essai en 2000. Je dirais que c'est justement parce
le group by utilise nécessairement un nom de colonne (et n'accepte donc
les alias), contrairement au order by.
A priori on peut approcher cela avec une sous-requête mais cela donne bien
sûr quelque chose de plus compliqué. Quel est le problème que pose
l'utilisation du nom de la colonne ?
Je viens de faire un essai en 2000. Je dirais que c'est justement parce
le group by utilise nécessairement un nom de colonne (et n'accepte donc
les alias), contrairement au order by.
A priori on peut approcher cela avec une sous-requête mais cela donne bien
sûr quelque chose de plus compliqué. Quel est le problème que pose
l'utilisation du nom de la colonne ?
Bonjour,
C'est parfaitement normal car conforme à la norme SQL. SQL est un
langage normalisé depuis 1986 ! on en est à la norme SQL 2003 en passant
par SQL 2 (1992) et SQL 3 (1999).
Or la norme précise que le groupage doit se faire exclusivement sur
l'expression. La précision de la position ordinale ne peut se faire que
pour la clause ORDER BY, de même pour les alias d'expression.
SQL Server est l'un des SGBDR avec IBM DB2 les plus respectueux de la
norme... MySQL, Access et Oracle n'ont que peu de respect de la norme
SQL et inventent des expressions illogiques !
Voici cependant un exemple syntaxiquement correct :
SELECT SUM(Col1), Col2 + Col3
FROM MaTable
GROUP BY Col2 + Col3
Pour apprendre SQL, mon site, comme mes bouquins peuvent vous y aider !
A +
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Bonjour,
C'est parfaitement normal car conforme à la norme SQL. SQL est un
langage normalisé depuis 1986 ! on en est à la norme SQL 2003 en passant
par SQL 2 (1992) et SQL 3 (1999).
Or la norme précise que le groupage doit se faire exclusivement sur
l'expression. La précision de la position ordinale ne peut se faire que
pour la clause ORDER BY, de même pour les alias d'expression.
SQL Server est l'un des SGBDR avec IBM DB2 les plus respectueux de la
norme... MySQL, Access et Oracle n'ont que peu de respect de la norme
SQL et inventent des expressions illogiques !
Voici cependant un exemple syntaxiquement correct :
SELECT SUM(Col1), Col2 + Col3
FROM MaTable
GROUP BY Col2 + Col3
Pour apprendre SQL, mon site, comme mes bouquins peuvent vous y aider !
A +
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Bonjour,
C'est parfaitement normal car conforme à la norme SQL. SQL est un
langage normalisé depuis 1986 ! on en est à la norme SQL 2003 en passant
par SQL 2 (1992) et SQL 3 (1999).
Or la norme précise que le groupage doit se faire exclusivement sur
l'expression. La précision de la position ordinale ne peut se faire que
pour la clause ORDER BY, de même pour les alias d'expression.
SQL Server est l'un des SGBDR avec IBM DB2 les plus respectueux de la
norme... MySQL, Access et Oracle n'ont que peu de respect de la norme
SQL et inventent des expressions illogiques !
Voici cependant un exemple syntaxiquement correct :
SELECT SUM(Col1), Col2 + Col3
FROM MaTable
GROUP BY Col2 + Col3
Pour apprendre SQL, mon site, comme mes bouquins peuvent vous y aider !
A +
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
"Fred BROUARD" a écrit dans le message de
news:%Bonjour,
C'est parfaitement normal car conforme à la norme SQL. SQL est un
langage normalisé depuis 1986 ! on en est à la norme SQL 2003 en passant
par SQL 2 (1992) et SQL 3 (1999).
Or la norme précise que le groupage doit se faire exclusivement sur
l'expression. La précision de la position ordinale ne peut se faire que
pour la clause ORDER BY, de même pour les alias d'expression.
SQL Server est l'un des SGBDR avec IBM DB2 les plus respectueux de la
norme... MySQL, Access et Oracle n'ont que peu de respect de la norme
SQL et inventent des expressions illogiques !
Bonjour,
illogique ma parait un peu fort ! Si je reste sur cet exemple, le n° ordinal
me parait plus facile à maintenir.
Certes, on pourra toujours rétorquer que si on décale les colonnes, il faut
penser à décaler les group by
(bien que généralement, je mets les colonnes de group by en début de SELECT,
comme ça, pas de décalage si j'ajoute des colonnes)
Mais suivant la norme, si tu as besoin en plus de récupérer la valeur
utilisé pour le group by, on se retrouve avec l'expression à 2 endroits dans
la requête...
donc, si modif, il faut penser à le changer aux 2 endroits...
de toute façon, l'une ou l'autre des solutions présente ses avantages et
inconvénients. tout dépend de ce qu'on veut faire et de la manière dont on
travaille.Voici cependant un exemple syntaxiquement correct :
SELECT SUM(Col1), Col2 + Col3
FROM MaTable
GROUP BY Col2 + Col3
Ok, merci, ça répond parfaitement à ma question !
Pour apprendre SQL, mon site, comme mes bouquins peuvent vous y aider !
Apprendre, non, ça va (ok, je ne connais pas les normes par coeur, je
confie..., mais j'arrive encore à bien me débrouiller :) ), mais je note le
site !A +
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
"Fred BROUARD" <brouardf@club-internet.fr> a écrit dans le message de
news:%23danIbb1GHA.4796@TK2MSFTNGP03.phx.gbl...
Bonjour,
C'est parfaitement normal car conforme à la norme SQL. SQL est un
langage normalisé depuis 1986 ! on en est à la norme SQL 2003 en passant
par SQL 2 (1992) et SQL 3 (1999).
Or la norme précise que le groupage doit se faire exclusivement sur
l'expression. La précision de la position ordinale ne peut se faire que
pour la clause ORDER BY, de même pour les alias d'expression.
SQL Server est l'un des SGBDR avec IBM DB2 les plus respectueux de la
norme... MySQL, Access et Oracle n'ont que peu de respect de la norme
SQL et inventent des expressions illogiques !
Bonjour,
illogique ma parait un peu fort ! Si je reste sur cet exemple, le n° ordinal
me parait plus facile à maintenir.
Certes, on pourra toujours rétorquer que si on décale les colonnes, il faut
penser à décaler les group by
(bien que généralement, je mets les colonnes de group by en début de SELECT,
comme ça, pas de décalage si j'ajoute des colonnes)
Mais suivant la norme, si tu as besoin en plus de récupérer la valeur
utilisé pour le group by, on se retrouve avec l'expression à 2 endroits dans
la requête...
donc, si modif, il faut penser à le changer aux 2 endroits...
de toute façon, l'une ou l'autre des solutions présente ses avantages et
inconvénients. tout dépend de ce qu'on veut faire et de la manière dont on
travaille.
Voici cependant un exemple syntaxiquement correct :
SELECT SUM(Col1), Col2 + Col3
FROM MaTable
GROUP BY Col2 + Col3
Ok, merci, ça répond parfaitement à ma question !
Pour apprendre SQL, mon site, comme mes bouquins peuvent vous y aider !
Apprendre, non, ça va (ok, je ne connais pas les normes par coeur, je
confie..., mais j'arrive encore à bien me débrouiller :) ), mais je note le
site !
A +
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
"Fred BROUARD" a écrit dans le message de
news:%Bonjour,
C'est parfaitement normal car conforme à la norme SQL. SQL est un
langage normalisé depuis 1986 ! on en est à la norme SQL 2003 en passant
par SQL 2 (1992) et SQL 3 (1999).
Or la norme précise que le groupage doit se faire exclusivement sur
l'expression. La précision de la position ordinale ne peut se faire que
pour la clause ORDER BY, de même pour les alias d'expression.
SQL Server est l'un des SGBDR avec IBM DB2 les plus respectueux de la
norme... MySQL, Access et Oracle n'ont que peu de respect de la norme
SQL et inventent des expressions illogiques !
Bonjour,
illogique ma parait un peu fort ! Si je reste sur cet exemple, le n° ordinal
me parait plus facile à maintenir.
Certes, on pourra toujours rétorquer que si on décale les colonnes, il faut
penser à décaler les group by
(bien que généralement, je mets les colonnes de group by en début de SELECT,
comme ça, pas de décalage si j'ajoute des colonnes)
Mais suivant la norme, si tu as besoin en plus de récupérer la valeur
utilisé pour le group by, on se retrouve avec l'expression à 2 endroits dans
la requête...
donc, si modif, il faut penser à le changer aux 2 endroits...
de toute façon, l'une ou l'autre des solutions présente ses avantages et
inconvénients. tout dépend de ce qu'on veut faire et de la manière dont on
travaille.Voici cependant un exemple syntaxiquement correct :
SELECT SUM(Col1), Col2 + Col3
FROM MaTable
GROUP BY Col2 + Col3
Ok, merci, ça répond parfaitement à ma question !
Pour apprendre SQL, mon site, comme mes bouquins peuvent vous y aider !
Apprendre, non, ça va (ok, je ne connais pas les normes par coeur, je
confie..., mais j'arrive encore à bien me débrouiller :) ), mais je note le
site !A +
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
"Patrice" a écrit dans le message de
news:Je viens de faire un essai en 2000. Je dirais que c'est justement parce
quele group by utilise nécessairement un nom de colonne (et n'accepte donc
pasles alias), contrairement au order by.
A priori on peut approcher cela avec une sous-requête mais cela donne
bien
sûr quelque chose de plus compliqué. Quel est le problème que pose
l'utilisation du nom de la colonne ?
Bonjour,
Parce que l'expression sur laquelle je dois faire un group by n'est pas
forcément une colonne ! Voir mon exemple!
"Patrice" <scribe@chez.com> a écrit dans le message de
news:uL8G4Ob1GHA.4632@TK2MSFTNGP03.phx.gbl...
Je viens de faire un essai en 2000. Je dirais que c'est justement parce
que
le group by utilise nécessairement un nom de colonne (et n'accepte donc
pas
les alias), contrairement au order by.
A priori on peut approcher cela avec une sous-requête mais cela donne
bien
sûr quelque chose de plus compliqué. Quel est le problème que pose
l'utilisation du nom de la colonne ?
Bonjour,
Parce que l'expression sur laquelle je dois faire un group by n'est pas
forcément une colonne ! Voir mon exemple!
"Patrice" a écrit dans le message de
news:Je viens de faire un essai en 2000. Je dirais que c'est justement parce
quele group by utilise nécessairement un nom de colonne (et n'accepte donc
pasles alias), contrairement au order by.
A priori on peut approcher cela avec une sous-requête mais cela donne
bien
sûr quelque chose de plus compliqué. Quel est le problème que pose
l'utilisation du nom de la colonne ?
Bonjour,
Parce que l'expression sur laquelle je dois faire un group by n'est pas
forcément une colonne ! Voir mon exemple!
Ok je pensais que le 2 était une erreur car je pense de toute façon qu'un
tel regroupement n'est pas possible (que veut dire regrouper par sum(x)
alors que sum(x) ne produit qu'une seule valeur ??? plus col1 ne pourrait
pas être sélectionné dans la liste des colonnes car il n'est possible de
sélectionner qu'une colonne qui sert de regroupement ou une fonction
d'aggrégation)...
Je pense que le mieux serait de revenir à ce que tu cherches à faire car
j'ai l'impression qu'il y a plus un problème d'angle d'attaque que de
syntaxe...
Eventuellement, il serait possible de faire quelque chose de similaire en
passant par des sous-requêtes. Quelque chose comme :
SELECT COUNT(*),m FROM
(SELECT pk, SUM(Valeur) AS m
FROM MaTable
GROUP BY pk)
AS SR
GROUP BY m
qui fait une somme en regroupant par pk puis comptant le nombre de fois où
chaque somme est produite. Est-ce quelque chose de ce style que tu
?
Ok je pensais que le 2 était une erreur car je pense de toute façon qu'un
tel regroupement n'est pas possible (que veut dire regrouper par sum(x)
alors que sum(x) ne produit qu'une seule valeur ??? plus col1 ne pourrait
pas être sélectionné dans la liste des colonnes car il n'est possible de
sélectionner qu'une colonne qui sert de regroupement ou une fonction
d'aggrégation)...
Je pense que le mieux serait de revenir à ce que tu cherches à faire car
j'ai l'impression qu'il y a plus un problème d'angle d'attaque que de
syntaxe...
Eventuellement, il serait possible de faire quelque chose de similaire en
passant par des sous-requêtes. Quelque chose comme :
SELECT COUNT(*),m FROM
(SELECT pk, SUM(Valeur) AS m
FROM MaTable
GROUP BY pk)
AS SR
GROUP BY m
qui fait une somme en regroupant par pk puis comptant le nombre de fois où
chaque somme est produite. Est-ce quelque chose de ce style que tu
?
Ok je pensais que le 2 était une erreur car je pense de toute façon qu'un
tel regroupement n'est pas possible (que veut dire regrouper par sum(x)
alors que sum(x) ne produit qu'une seule valeur ??? plus col1 ne pourrait
pas être sélectionné dans la liste des colonnes car il n'est possible de
sélectionner qu'une colonne qui sert de regroupement ou une fonction
d'aggrégation)...
Je pense que le mieux serait de revenir à ce que tu cherches à faire car
j'ai l'impression qu'il y a plus un problème d'angle d'attaque que de
syntaxe...
Eventuellement, il serait possible de faire quelque chose de similaire en
passant par des sous-requêtes. Quelque chose comme :
SELECT COUNT(*),m FROM
(SELECT pk, SUM(Valeur) AS m
FROM MaTable
GROUP BY pk)
AS SR
GROUP BY m
qui fait une somme en regroupant par pk puis comptant le nombre de fois où
chaque somme est produite. Est-ce quelque chose de ce style que tu
?