J'ai cette requete dont je ne suis pas très fier, je pense que l'on peut faire ça de manière plus simple et plus optimale.
Je simplifie le problème :
J'ai deux tables.
La table CLI (client) avec un champ cli_id (cle de la table) et un champ cli_nom
et la table transac (transaction des clients) avec les champs tr_id (cle de la table), cli_id et type (de la transaction) :
Le but du jeu est d'obtenir une requete (pour en faire une vue) qui liste tous les clients avec le nombre de transactions associées (qui ne soient pas de type = 3) dans la table transac et donc 0 s'il n'y a pas de transaction.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 CREATE TABLE cli ( [cli_id] [int] NOT NULL , [cli_nom] [varchar] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ) CREATE TABLE transac ( [tr_id] [int] NOT NULL , [cli_id] [int] NOT NULL , [type] [int] NOT NULL )
Voici ce que j'ai fait :
Peut-on faire mieux ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 select transac.cli_id, count(*) as count_transac from transac where transac.type <> 3 GROUP BY transac.t_id union select cli.cli_id, 0 as count_transac from cli where cli.cli_id not in (select transac.cli_id from transac )
Partager