2016-04-12 12 views
1

Ich bin ein bisschen auf etwas SQL-Arbeit stecken. Grundsätzlich habe ich 3 verschiedene Tabellen, die ungefähr so ​​aussehen: (HINWEIS: Die "Nummer" soll die ID-Nummer eines Buches sein, Zahlenwiederholung bedeutet, dass es sich um dasselbe Buch handelt. Ich habe es so geändert, dass es so ist Einfachheit)SQL eindeutige Werte in mehreren Tabellen

Tabelle A:.

Number Name Surname 
1  Bob  Bobinson 
1  Paul Paulster 
2  Simon Simones 
3  Anton Antonio 
etc. 

Tabelle B:

Number Book 
1  Taken 
1   
1   
2  Taken 
2  Taken 
3   
3  Taken 
3  Taken 
etc. 

Tabelle C:

Number  Pages 
1   245 
2   147 
3   512 
etc. 

Was ich tun muss ist, dass für jeden Namen und Nachnamen die Anzahl zählt, wie oft sich ihre Nummer in Tabelle B wiederholt, und dann die gesamte Seitenzahl für jeden zählt. Die Antwort Tabelle sollte wie folgt aussehen:

Bob Bobinson 3 735 
Paul Paulster 3 735 
Simon Simones 2 294 
Anton Antonio 3 1536 

ich so etwas wie dies versucht:

SELECT Name, Surname, Count(A.Number = B.Number) FROM A, B, C; 

Ja, ich will ehrlich sein: Ich habe absolut keine Ahnung, was es braucht aussehen. Ich habe versucht, WHILE A.Number = B.Number später zu implementieren, aber es funktioniert nicht für mich. Jede Hilfe würde sehr geschätzt werden.

P.S. Das "Taken" ist für später, um zu überprüfen, welche Nummer die meisten hat.

+1

Tipp des Tages: Wechseln Sie in die moderne, explizite 'JOIN'-Syntax! – jarlh

+0

Warum teilen Bob und Paul dieselbe ID? – jarlh

+0

@jarlh Sie sind Co-Autoren eines Buches, die Zahlen verweisen auf verschiedene Bücher, aber ich habe das hier geändert, um die Tabellen leichter lesbar zu machen. – Anstane

Antwort

3

Dies sollte bekommen, was Sie wollen:

select A.Name, B.Surname, count(*), C.Pages 
    from TableA 
     Join TableB on A.Number = B.Number 
     Join TableC on A.Number = C.Number 
group by A.Name, B.Surname, C.Pages; 

Alternativ ist es mit einer Unterabfrage Sie tun können, wenn es einfacher nachträgliche Änderungen macht, in der Regel auch wenn diese nicht so gut sprechen Sie durchführen:

select A.Name, B.Surname, 
     (select count(*) 
      from TableBB 
     where B.Number = A.Number) As CNT, 
     C.Pages 
    from TableA 
     Join TableC on A.Number = C.Number; 
+0

Es hat in der Tat. Vielen Dank! Ich muss mich wirklich daran gewöhnen, Join zu benutzen. – Anstane

+0

Kein Problem. Vielleicht wissen Sie das bereits, aber wenn Sie versuchen herauszufinden, wie viele Bücher als nächstes genommen werden, sollten Sie in der Lage sein, eine Case-Anweisung zu addieren, dh sum (wenn B.Book = 'Taken', dann 1 sonst 0 Ende). – MightyRearranger

Verwandte Themen