Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
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/01/2012, 11h48   #1
Membre Expert
 
Inscription : octobre 2007
Messages : 3 948
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 3 948
Points : 1 905
Points : 1 905
Par défaut Select all group having same value

Bonjour

Je cherche la meilleure maniere de faire le select suivant :
J'ai une table avec trois colonnes

BoxID
Date
Checked

Pluisieurs rows peuvent avoir le meme BoxID
La valeur Checked peut etre 0 ou 1

Je voudrais extraitre tous les BoxID distinct ayant TOUS les Checked a 1 et Date not null

Donc un Boxid ayant AU MOINS 1 Checked a zero ne doit pas apparaitre !!

Merci de votre aide
__________________
« Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)
olibara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 12h05   #2
Membre émérite
 
Homme Tony
Développeur .NET
Inscription : novembre 2010
Messages : 570
Détails du profil
Informations personnelles :
Nom : Homme Tony
Localisation : France

Informations professionnelles :
Activité : Développeur .NET

Informations forums :
Inscription : novembre 2010
Messages : 570
Points : 821
Points : 821
Bonjour,

tu dois pouvoir t'en sortir avec un WHERE Checked = 1 et un NOT EXISTS sur Checked = 0
__________________
Le Porc est un loup pour le Porc.
asmduty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 12h07   #3
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 983
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 983
Points : 1 693
Points : 1 693
Bonjour,

Voici une premiere piste :

- tu sélectionnes les BOXID dont le checked = 0
- tu les exclus de ta requête avec un NOT IN

P.S : pense à mettre ton SGBD et une ébauche de requête.
__________________
~ Lola ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 12h20   #4
Membre confirmé
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 181
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2006
Messages : 181
Points : 267
Points : 267
Avec group by et having comme demandé :

Code :
1
2
3
4
5
6
7
SELECT BOXID
      ,sum (case Date when NULL then 1 else 0 end) AS ko_date
      ,sum (case checked when 0 then 1 else 0 end) AS ko_checked
FROM TABLE
GROUP BY BOXID
HAVING sum (case Date when NULL then 1 else 0 end) = 0
   AND sum (case checked when 0 then 1 else 0 end) = 0
A verifier ...
Jean.Cri1 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/01/2012, 12h20   #5
Membre Expert
 
Inscription : octobre 2007
Messages : 3 948
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 3 948
Points : 1 905
Points : 1 905
Bonjour

Merci de votre aide

Je suis en SQL Server 2008

Voici un exemple mais qui ne me donne pas ce que je souhaite (pas d'exclusion si Cheched=0)

Je pense instinctivement que OVER PARTITION pourrait m'aider mais je ne maitrise pas bien

Code :
1
2
3
4
5
6
7
SELECT DISTINCT 
VbagNumber,checked
FROM TblFlatTradein 
WHERE 
VerifiedBoxDate IS NOT NULL
AND Checked=1
ORDER BY VbagNumber,Checked
__________________
« Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)
olibara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 13h26   #6
Membre émérite
 
Homme Tony
Développeur .NET
Inscription : novembre 2010
Messages : 570
Détails du profil
Informations personnelles :
Nom : Homme Tony
Localisation : France

Informations professionnelles :
Activité : Développeur .NET

Informations forums :
Inscription : novembre 2010
Messages : 570
Points : 821
Points : 821
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT DISTINCT 
VbagNumber,checked
FROM TblFlatTradein T
WHERE 
VerifiedBoxDate IS NOT NULL
AND Checked=1
AND NOT EXISTS
(
SELECT VbagNumber
FROM TblFlatTradein 
WHERE 
(VerifiedBoxDate IS NOT NULL)
AND Checked=0
AND VbagNumber = T.VbagNumber
)
ORDER BY VbagNumber,Checked
Je pense que cette requête doit faire l'affaire.
Je ne sais pas si c'est la plus efficace.
J'ai mis (VerifiedBoxDate IS NOT NULL) entre parenthèses car je ne sais pas si tu dois exclure tous les enregistrements qui ont Checked = 0 ou tous les enregistrements qui ont Checked = 0 ET la date not null.
__________________
Le Porc est un loup pour le Porc.
asmduty 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 21h01.


 
 
 
 
Partenaires

Hébergement Web