Wie man dynamische Tabelle und Tabelle in SQL beitritt

Ich habe zwei Tische Phone und Name . Tabellenname enthält zwei Felder Name und PhoneNo . PhoneNo und PhoneNo . Tabellenname

 Name PhoneNo. A 1111 B 2222 C 3333 

Und data in der Telefon-Tabelle

 PhoneNo CallDuration 1111 30 5555 40 6666 30 1111 20 6666 10 2222 5 

Ergebnis sollte eine Tabelle sein, die enthält zwei Spalte Caller und occurrence . Wenn caller in der Name Tabelle existiert, dann sollte ihr oder sein Name dort in der Caller und nein mal, wie es angerufen wurde (von der Phone Tabelle), ansonsten sollte die Number in der caller erscheinen. Ergebnis des folgenden Beispiels sollte so sein

 Caller Ocucrnce A 2 B 1 5555 1 6666 2 

Ich habe versucht, aber jetzt weiß ich nicht, wie man überprüft, ob die Nummer in der Namens-Tabelle ist oder nicht

 select PhoneNo,COUNT(*) as CALLER from PhoneNo GROUP BY PhoneNo 

Wie wäre es damit?

 select PhoneNo = isnull(n.name, p.PhoneNo), Occurence = count(*) from phone p left join name n on n.PhoneNo = p.PhoneNo group by p.phoneNo, n.name 

BEARBEITEN Um C einzuschließen , versuche das:

 select PhoneNo = isnull(n.name, p.PhoneNo), Occurence = count(p.phoneNo) from phone p full join name n on n.PhoneNo = p.PhoneNo group by p.phoneNo, n.name 

versuchen Sie dies: Einfache Mitzählung Mit Count kann hier arbeiten.Count wird Count Vorkommen

 select case when ph.Name is NULL then cal.PhoneNo else ph.Name end ,COUNT(*) as Occrnce from PhoneNo ph left join CallDuration cal on ph.PhoneNO=cal.PhoneNo 

Versuche dies

 SELECT isnull(Caller ,PhoneNo) as Caller ,COUNT(*) AS CALLER FROM PhoneNo AS p LEFT JOIN NameTable AS n ON p.PhoneNo = n.PhoneNo GROUP BY PhoneNo,Caller 

Gruppierung von PhoneNo, und auch zu überprüfen, ob es irgendwelche Vorkommen in der Namens-Tabelle mit einem linken join …

Um die Namen zu erhalten, musst du die Ergebnisse deiner Abfrage mit der Name Tabelle verbinden, zB:

 SELECT ISNULL(n.Name,p.PhoneNo) as Caller, Occurences FROM (SELECT PhoneNo, COUNT(*) AS Occurences FROM Phone GROUP BY PhoneNo) p LEFT OUTER JOIN Name n ON p.PhoneNo=n.PhoneNo 

oder Sie können einfach die beiden Tabellen dann gruppieren nach Phone.PhoneNo und 'Name.Name` wie wewesthemenace vorgeschlagen:

 select PhoneNo = isnull(n.name, p.PhoneNo), Occurence = count(*) from phone p left join name n on n.PhoneNo = p.PhoneNo group by p.phoneNo, n.name 

In beiden Fällen ist das Ergebnis das, was du willst