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
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
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
Je devrai adapter ce processus à 800'000 enregistrements. -- 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" <RenDelcourt@discussions.microsoft.com> wrote in message
news:CB66959C-1497-4536-9F40-BD3B66977F6A@microsoft.com...
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
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
Je devrai adapter ce processus à 800'000 enregistrements. -- René Delcourt
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
Je devrai adapter ce processus à 800'000 enregistrements. -- 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" <RenDelcourt@discussions.microsoft.com> wrote in message
news:CB66959C-1497-4536-9F40-BD3B66977F6A@microsoft.com...
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
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