2011-09-30 3 views
1

J'ai une requête SQLapplication distincte à une seule colonne

select distinct 
Process.ReportLogProcessID as [Process.ReportLogProcessID], 
Process.ProcessTitle as [Process.ProcessTitle], 
CAST(User0.PrimaryEmail AS nvarchar(max)) as [Process_Contacts.IsPrimaryContact] 

    from 
ReportProcess as Process inner join 
ReportProcessContact as ReportProcessContact0 on 
    ((ReportProcessContact0.SessionID = Process.SessionID)) left outer join 
[User] as User0 on 
    ((ReportProcessContact0.ReferenceID = User0.UserID)) left outer join 
[Group] as Group0 on 
    ((ReportProcessContact0.ReferenceID = Group0.GroupID and 
ReportProcessContact0.ReferenceType = 2)) 

order by 
[Process.ProcessTitle] asc 

et donner ci-dessous résultat

enter image description here

si vous le voyez retourne deux lignes avec le même « processus Title'- » Testing123 'est-il possible de distinguer ceci malgré le' contact de processus '.

Existe-t-il un moyen de distinguer le résultat sur la base d'une colonne particulière?

+2

Alors que 'email' doit le retourner alors? –

+0

quel que soit l'identifiant d'email, il devrait retourner une seule ligne, soit avec [email protected] ou [email protected] car les deux ayant le même Titre du processus – BreakHead

+0

Et vous ne vous souciez pas de qui? C'est arbitraire? –

Répondre

1

Dans votre requête, la colonne [Process_Contacts.IsPrimaryContact] contient différents e-mails pour les deux enregistrements. Si vous supprimez cette colonne, seuls les enregistrements distincts seront enregistrés.

MISE À JOUR: Vous pouvez essayer comme:

select 
     Process.ReportLogProcessID as [Process.ReportLogProcessID], 
     Process.ProcessTitle as [Process.ProcessTitle], 
     MAX(CAST(User0.PrimaryEmail AS nvarchar(max))) as [Process_Contacts.IsPrimaryContact] 
from ReportProcess as Process 
inner join ReportProcessContact as ReportProcessContact0 on 
     ((ReportProcessContact0.SessionID = Process.SessionID)) 
left outer join [User] as User0 on 
     ((ReportProcessContact0.ReferenceID = User0.UserID)) 
left outer join [Group] as Group0 on 
     ((ReportProcessContact0.ReferenceID = Group0.GroupID and 
     ReportProcessContact0.ReferenceType = 2)) 

group by Process.ReportLogProcessID, Process.ProcessTitle 
order by [Process.ProcessTitle] asc 
+0

Je ne peux pas supprimer cette colonne – BreakHead

+0

@BreakHead: Ensuite, vous devez ajouter une clause group by et utiliser n'importe quelle fonction d'agrégation pour sélectionner un email. –

+0

Merci, un exemple à se référer? – BreakHead

Questions connexes