Lassen Sie uns sagen, ich habe diese Tabelle (dies vereinfacht ist, gibt es natürlich auch andere Spalten):T-SQL eine Zeile zurück, wenn eine andere Zeile nicht
CompanyID (int)
ContactName (varchar(50))
ContactType (char(1))
mit den Werten:
CompanyID | ContactName | ContactType
-----------------------------------------------
1 | John Doe | A
1 | Jane Smith | B
2 | Ralph Jones | B
3 | Dick Grayson | A
Was ich will, sind alle Unternehmen, bei denen es eine ContactType = 'A' gibt, es sei denn, es gibt keine ContactType = 'A' geben Sie die ContactType = 'B' zurück. So in diesem Beispiel, ich will:
1, John Doe (because he's a ContactType A)
2, Ralph Jones (because Company #2 doesn't have a ContactType A)
3, Dick Grayson (because he's a ContactType A)
Ich kann nicht einfach sagen: „A oder B“, weil ein Unternehmen beide haben kann.
Hier ist, was ich versucht (und scheiterte)
use MyFancyDatabase
drop table #TypeA
drop table #TypeB
drop table #TypeAB
create table #TypeA(ownerkey int, ContactName varchar(200), ContactType char(1))
insert #TypeA
Select ownerkey, ContactName, ContactType from address
where ContactType = 'A' and CancelDate is null
create table #TypeB(ownerkey int, ContactName varchar(200), ContactType char(1))
insert #TypeB
Select ownerkey, ContactName, ContactType from address
where ContactType = 'B' and CancelDate is null
create table #TypeAB(ownerkey int, ContactName varchar(200), ContactType char(1))
insert #TypeAB
select * from #TypeA
except
select * from #TypeB
ich auf Englisch denke, es ist „A, aber wenn es keine A ist, dann nehmen B.“
Irgendwelche Vorschläge?
versuchen 'coalesce()', vielleicht. –