2017-09-26 11 views
0

Dans une table de transaction, a order_ID (PK), transaction_date, cus_ID, store_ID. Maintenant, j'ai besoin d'obtenir tous les cus_ID avec quand group par cus_ID, count (store_ID) = 1. Il y a une exception cependant - Quand cus_ID a seulement des commandes avec store_ID = '999'. La date de transaction doit être au cours des 365 derniers jours. J'ai le code comme ci-dessous:comment exclure une condition spéciale lors de l'utilisation de group by et count()

Select cus_ID, count(store_ID) as store_count 
From trn_header 
where transanction_date From '7/30/2017' - 365 To '7/30/2017' 
group by cus_ID having store_count = 1 

Je ne sais pas comment exclure le '999' état ... merci

+0

Quand 'store_ID = '999'' alors quoi? Cela * sonne * comme si vous aviez besoin d'une déclaration "CASE" mais je ne comprends pas votre logique. – Simon

+0

si un cust_id a toutes ses commandes comme store_ID = '999', il devrait être exclu par ma requête. –

Répondre

0

Le la bonne réponse devrait être comme ceci:

select distinct cus_id, store_id from 
(select cus_id,count(distinct store_id) as freq 
from a 
where transaction_date between @begin_date and @end_date 
group by cus_id 
having count(distinct store_id) = 1 
) b, a where a.cus_id = b.cus_id and store_id <> '999' 
0
Select cus_ID, count(store_ID) as store_count 
From trn_header 
where transanction_date From '7/30/2017' - 365 To '7/30/2017' And store_ID<>'999' 
group by cus_ID having store_count = 1 

espérons qu'il peut être utile

+0

Je l'ai deviné car je devrais utiliser la sous-requête pour exclure le cas de stockage = '999'; il y a un malentendu de ma question. Désolé pour ça. –