Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/04/2011, 16h19   #1
Invité de passage
 
Inscription : avril 2011
Messages : 4
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : avril 2011
Messages : 4
Points : 0
Points : 0
Par défaut Group by sur un alias

Bonjour,

J'essaie de faire un group by sur un alias. D'après ce que j'ai compris, il faut faire une sous-requête. Pourtant, cela ne fonctionne pas:

Code :
1
2
3
4
5
6
7
8
9
10
 
SELECT count(datetime), myYear
FROM (
  SELECT
     datetime, 
     (SELECT EXTRACT(year FROM datetime) FROM session) AS "myYear"
  FROM
     session
  ) AS inline
GROUP BY myYear;
J'ai l'erreur:

"SQL command not properly ended"

Qqn à une idée?
Merci.
clusty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2011, 16h58   #2
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 311
Points : 5 808
Points : 5 808
Ca marche mais pas de As pour la table et des guillemets par tout
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
WITH v_session AS (
  SELECT sysdate AS datetime FROM dual
)
SELECT count(datetime), "myYear"
FROM (
  SELECT
     datetime, 
     (SELECT EXTRACT(year FROM datetime) FROM v_session) AS "myYear"
  FROM
     v_session
  ) inline
GROUP BY "myYear";
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/04/2011, 08h40   #3
Invité de passage
 
Inscription : avril 2011
Messages : 4
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : avril 2011
Messages : 4
Points : 0
Points : 0
Merci pour l'aide. J'ai maintenant le code suivant:

Code :
1
2
3
4
5
6
7
8
9
10
 
SELECT count(datetime), "myYear"
FROM (
  SELECT
     datetime, 
     (SELECT EXTRACT(year FROM datetime) FROM session) AS "myYear"
  FROM
     session
  ) inline
GROUP BY "myYear";
Avec cette fois l'erreur:

"ORA-01427: single-row subquery returns more than one row"

J'ai lu dans la doc, qui fallait utilisé ALL/ANY/etc. dans la requête extérieur, mais cela ne fonctionne pas non plus.

Une idée?
Merci.
clusty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2011, 08h48   #4
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 311
Points : 5 808
Points : 5 808
Les requêtes scalaires
Code :
1
2
3
4
5
...
SELECT
     datetime, 
     (SELECT EXTRACT(year FROM datetime) FROM session) AS "myYear"...
ne peuvent ramener qu'au maximum une seule valeur


Code :
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
 
Connected TO Oracle DATABASE 10g Enterprise Edition Release 10.2.0.4.0 
Connected AS mni
 
SQL> 
SQL> WITH v_session AS (
  2    SELECT sysdate AS datetime FROM dual union ALL
  3    SELECT sysdate - 1 AS datetime FROM dual
  4  )
  5  SELECT count(datetime), "myYear"
  6  FROM (
  7    SELECT
  8       datetime,
  9       EXTRACT(year FROM datetime) AS "myYear"
 10    FROM
 11       v_session
 12    ) inline
 13  GROUP BY "myYear"
 14  /
 
COUNT(DATETIME)     myYear
--------------- ----------
              2       2011
 
SQL>
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2011, 19h52   #5
Membre Expert
 
Femme
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 480
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Ain (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juin 2007
Messages : 480
Points : 1 024
Points : 1 024
Bonjour,
On peut aussi faire le GROUP BY directement sur l'expression :
Code :
1
2
3
4
5
6
7
WITH v_session(datetime) AS (
      SELECT sysdate      FROM dual union
      SELECT sysdate - 1 FROM dual
     )
SELECT   count(datetime), EXTRACT(year FROM datetime) AS "myYear"
FROM     v_session
GROUP BY EXTRACT(year FROM datetime)
tedo01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h54.


 
 
 
 
Partenaires

Hébergement Web