Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
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 21/04/2011, 12h24   #1
Futur Membre du Club
 
Inscription : décembre 2010
Messages : 125
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 125
Points : 19
Points : 19
Par défaut [SQLSERVER2005] Group by + LKE '%'

Bonjour,

J'ai une table qui compte des numéros de comptes, chacun lié à un pays
Code :
1
2
3
4
5
6
7
8
9
10
11
12
PAYS COMPTE
A     12301
A     12303
A     51201
A     12305
B     12802
B     18502
C     18501
C     18504
C     41803
C     48150
...
J'aimerai avoir un code qui me permette d'avoir la table de résultat ci-dessous.
En fait, je veux pouvoir identifier, selon les pays, combien de comptes se terminent par 0, par 1, par 2, par 3, etc..
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
PAYS CHIFFRE TOT_COMPTE
A     0        0
A     1        2
A     2        0
A     3        1
A     5        1
B     0        0
B     1        0
B     2        2
B     3        0
B     4        0
B     5        0
C     0        1
C     1        1
C     2        0
C     3        1
C     4        1
C     5        0
...
Auriez-vous une idée ?
Merci d'avance.
apnw7931 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 13h58   #2
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour,

Code SQL :
1
2
3
4
 
SELECT PAYS,RIGHT(COMPTE, 1), COUNT(*)
FROM LaTable
GROUP BY PAYS, RIGHT(COMPTE, 1)

Cette requete ne vous renverra pas les lignes pour lesquelles il n'y a aucun compte !
Si vous les voulez, vous pouvez faire :
Code SQL :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
WITH nb AS (
    SELECT 0 AS n
    UNION ALL
    SELECT n + 1
    FROM nb
    WHERE n < 9
),
P AS (
	SELECT DISTINCT Pays
	FROM LaTable
)
SELECT P.PAYS, n, COUNT(Compte) AS Nombre
FROM  P
CROSS JOIN nb
LEFT JOIN LaTable T
	ON T.Pays = P.Pays
        AND RIGHT(T.Compte,1) = n
GROUP BY P.PAYS, n
ORDER BY P.PAYS, n

Qui pourrait s'ecrire plus proprement/simplement si votre base était mieux conçue, avec la liste des pays dans une table à part, reference par la table des comptes, ce qui est peut etre le cas (remplacez alors la pseudo table P par la table des pays)
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 15h51   #3
Futur Membre du Club
 
Inscription : décembre 2010
Messages : 125
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 125
Points : 19
Points : 19
Merci bcp aieeeuuuuu !!

Code :
1
2
3
SELECT PAYS,RIGHT(COMPTE, 1), COUNT(*)
FROM LaTable
GROUP BY PAYS, RIGHT(COMPTE, 1)

J'ai réussi à modifier ce code selon mes besoins.

Décidémment, vous m'êtes d'une grande aide.


Merci à la communauté
apnw7931 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h19.


 
 
 
 
Partenaires

Hébergement Web