Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Difficulté dans une Requête

2 réponses
Avatar
René Delcourt
Bonjour,
Je bloque sur une requête qui apparemment semble simple.
Sur la DB ci-dessous je dois extraire un tableau qui devrait ressembler à
ceci :
Il s'agit de compter les numéros qui n'appartiennet qu'aux classes
11,
13 ou 21
(11 et 13) ou (11 et21) ou (11 et 13 et 21)
Résultat du tableau :

Classe
Nombre
11
1
13 ou 21
2
(11 et 13) ou (11 et21) ou (11 et 13 et 21) 3

DB
Numéro CLASSE
1000 11
1002 13
1003 21
1004 11
1004 13
1004 21
1005 11
1005 13
1005 21
1006 11
1006 13
1006 21

Je devrai adapter ce processus à 800'000 enregistrements.
--
René Delcourt

2 réponses

Avatar
Sylvain Lafontaine
Ce genre de requête est plus difficile qu'il n'y paraît et requière
habituellement des Count(*) sur une sous-requête comportant un Group By et
un Having; par exemple pour le dernier cas:

Select Count (*) From (Select Id from A Where No in (11, 13, 21) Group By Id
Having Count (*) >= 2) as Q

Vous utilisez évidemment une Union pour ajouter à cette requête les
résultats des deux autres cas.

Si vous n'êtes pas pressé par le temps, que vous êtes vraiment limité à ces
quelques classes et que vous voulez avoir votre rapport le plus tôt possible
sans vous tracasser, l'utilisation de multiple clauses Exists (...) devrait
faire l'affaire; par exemple pour le dernier cas:

Where (Exists (Select * from A where No = 11) And
(Exists (Select * From A where No = 13) or Exists (Select *
From A where No = 21)))

OR (Exists (Select * from A where No = 13) And Exists (Select *
From A where No = 21))


--
Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC
E-mail: http://cerbermail.com/?QugbLEWINF


"René Delcourt" wrote in message
news:
Bonjour,
Je bloque sur une requête qui apparemment semble simple.
Sur la DB ci-dessous je dois extraire un tableau qui devrait ressembler à
ceci :
Il s'agit de compter les numéros qui n'appartiennet qu'aux classes
11,
13 ou 21
(11 et 13) ou (11 et21) ou (11 et 13 et 21)
Résultat du tableau :

Classe
Nombre
11
1
13 ou 21
2
(11 et 13) ou (11 et21) ou (11 et 13 et 21) 3

DB
Numéro CLASSE
1000 11
1002 13
1003 21
1004 11
1004 13
1004 21
1005 11
1005 13
1005 21
1006 11
1006 13
1006 21

Je devrai adapter ce processus à 800'000 enregistrements.
--
René Delcourt


Avatar
René Delcourt
Cela me console de savoir que ce n'est pas si simple.
De plus je n'ai montré que la partie visible de l'iceberg.
Dans cette DB simplifiée, il y a encore un regroupement qui précède le
"numero"...
Je ne me sens pas encore à la hauteur pour appliquer vos conseils.
Merci quand même
--
René Delcourt



Ce genre de requête est plus difficile qu'il n'y paraît et requière
habituellement des Count(*) sur une sous-requête comportant un Group By et
un Having; par exemple pour le dernier cas:

Select Count (*) From (Select Id from A Where No in (11, 13, 21) Group By Id
Having Count (*) >= 2) as Q

Vous utilisez évidemment une Union pour ajouter à cette requête les
résultats des deux autres cas.

Si vous n'êtes pas pressé par le temps, que vous êtes vraiment limité à ces
quelques classes et que vous voulez avoir votre rapport le plus tôt possible
sans vous tracasser, l'utilisation de multiple clauses Exists (...) devrait
faire l'affaire; par exemple pour le dernier cas:

Where (Exists (Select * from A where No = 11) And
(Exists (Select * From A where No = 13) or Exists (Select *
From A where No = 21)))

OR (Exists (Select * from A where No = 13) And Exists (Select *
From A where No = 21))


--
Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC
E-mail: http://cerbermail.com/?QugbLEWINF


"René Delcourt" wrote in message
news:
Bonjour,
Je bloque sur une requête qui apparemment semble simple.
Sur la DB ci-dessous je dois extraire un tableau qui devrait ressembler à
ceci :
Il s'agit de compter les numéros qui n'appartiennet qu'aux classes
11,
13 ou 21
(11 et 13) ou (11 et21) ou (11 et 13 et 21)
Résultat du tableau :

Classe
Nombre
11
1
13 ou 21
2
(11 et 13) ou (11 et21) ou (11 et 13 et 21) 3

DB
Numéro CLASSE
1000 11
1002 13
1003 21
1004 11
1004 13
1004 21
1005 11
1005 13
1005 21
1006 11
1006 13
1006 21

Je devrai adapter ce processus à 800'000 enregistrements.
--
René Delcourt