0
votes

Comment ne pas afficher un élément dans Sélectionnez la requête?

Je me sens un peu stupide de demander cela parce que je me sens comme très facile, mais pour une raison quelconque, je ne suis pas en mesure de mettre à jour une requête pour ne pas sélectionner un élément spécifique basé sur deux critères.

Disons que j'ai Données telles que ceci: xxx

afin que vous puissiez voir que nous avons deux lignes BOB avec la même adresse ID mais différente (type1 et type2). Je veux pouvoir seulement voir l'un des Bob.

résultat souhaité: xxx

donc ce que je fais est quelque chose comme xxx

S'il vous plaît, n'utilisez pas le nombre de comptes comme critères, car dans mon exemple, il arrive que cela compte = 0 pour la ligne que je ne veux pas voir. Il peut varier.

J'ai de nombreuses lignes où je peux avoir plusieurs instances du même ID avec une variété de variantes différentes. Je cherche à exclure certaines instances d'identifiant basées sur une valeur variante

mise à jour:

Cela n'a rien à voir avec la dernière variante, cela a à voir avec un spécifique < / em> variante. Donc, je cherche simplement à utiliser essentiellement une clause où j'ai utilisé l'ID et la variante, afin de supprimer cette ligne particulière.


1 commentaires

Vous semblez avoir répondu à la question vous-même. S'il y a des paires ID / Variant, vous souhaitez exclure, vous pouvez utiliser un où la clause . Quelle est votre question alors?


3 Réponses :


2
votes

Agrégation (regroupement) Les données telles que vous faites sont une façon de le faire, bien que la condition est un peu survenue. Si tout ce que vous voulez faire est de voir les combinaisons uniques de l'identifiant et du nom, puis une autre approche est d'utiliser l'instruction "distincte".

select *
from tbl1
-- Define rows to exlcude
where not (Id = 110 and Variant = 'Type 1') -- Your example
and not (Id = 110 and Variant = 'Type 3') -- Theoretical example
;


9 commentaires

Ce n'est pas une réponse à ma question. Veuillez lire à nouveau. J'ai des centaines de lignes et souhaitez exclure un élément spécifique basé sur ces deux critères: ID et variante. Il pourrait y avoir plusieurs instances du même ID avec une variante différente. Même si c'était aussi simple, cela ne la résoudrait toujours pas si vous regardez mon résultat souhaité puisque vous ne recherchez que «type1»


Koosh, vous ne mentionnez pas de critères d'exclusion spécifiques dans votre question. Seulement que vous souhaitez voir un enregistrement pour chaque combinaison d'identité et de nom. Pouvez-vous définir la règle que vous souhaitez utiliser pour exclusion?


J'ai ajouté des informations ci-dessous, je dois l'exclure en fonction de l'ID et de la variante, car il pourrait y avoir plusieurs instances du même ID et la même variante.


Je vois ça. Il n'est toujours pas clair ce que la règle est de choisir ce que l'enregistrement doit exclure cependant. Voulez-vous toujours voir la dernière variante? Afin de codifier cela, vos règles d'exclusion doivent être prévisibles. Sinon, vous finirez par avoir à ajouter de nouveaux critères à votre clause WHERE pour chaque exclusion unique.


mettre à jour la question avec des notes d'ome. Tout ce que je dis, c'est que je pourrais avoir une carte d'identité 110 apparaissent 30 fois dans la table avec différentes variantes. Je souhaite pouvoir supprimer une instance de cet identifiant où une variante particulière est égale à n'importe quel type. Pas le plus récent, pas au plus tôt. Il pourrait être entre les deux


Merci de clarifier. Dans ce cas, une liste d'exclusion manuelle est vraiment la seule façon de le faire. J'ai ajouté un dernier exemple dans ma réponse pour couvrir ce cas.


OUI. Bon sang, comment ai-je manqué ça? Je ne comprends pas pourquoi ma requête ne fonctionne pas comme il est écrit, je pensais que cela fonctionnerait si j'ai inclus les deux critères de paranthèse


D'accord, votre problème était donc beaucoup plus simple que je l'avais imaginé. Votre clause où était juste écrit de manière incorrecte.


Merci de clarifier oui, il était si simple que je me sentais vraiment stupide pour demander mais apprécier la patience!



1
votes

Je pense que la logique que vous voulez est quelque chose comme: xxx

pour la deuxième condition, continuez à ajouter: xxx

vous pouvez Exprimez également cela à l'aide d'une liste d'exclusions: xxx


0 commentaires

2
votes

Avez-vous envisagé d'utiliser une table d'exclusion où vous pouvez placer les combinaisons ID et variantes que vous souhaitez exclure? (Je viens d'utiliser des tables Temps pour cet exemple, vous pouvez toujours utiliser des tables utilisateur afin que votre table d'exclusion soit toujours disponible)

Voici un exemple de ce que je veux dire sur votre exemple: P>

if object_id('tempdb..#temp') is not null
    drop table #temp

create table #temp (
     ID int,      
     Name  varchar(20),
     Variant varchar(20),
     Count1 int 
)

if object_id('tempdb..#tempExclude') is not null
    drop table #tempExclude

create table #tempExclude (
     ID int,      
     Variant varchar(20)

)

insert into #temp values 
    (110,'Bob','Type1',0),
    (110,'Bob','Type2',1),
    (120,'John','Type1',1),
    (120,'John','Type2',1),
    (120,'John','Type2',1),
    (120,'John','Type2',1),
    (120,'John','Type3',1)

insert into #tempExclude values (110,'Type1')

select
    t.ID,
    t.Name
    ,t.Variant
    ,sum(t.Count1) as TotalCount
from
    #temp t

    left join
    #tempExclude te
        on t.ID = te.ID
            and t.Variant = te.Variant
where
    te.id is null
group by
    t.ID,
    t.Name
    ,t.Variant


1 commentaires

Merci pour votre réponse. S'il est nécessaire de le faire avec beaucoup d'exclusions, cela serait certainement bon. Mais dans ce cas, nous faisons rarement cela, alors je viens de mettre à jour la requête!