2017-03-31 5 views
0

Ich habe drei Tabellen:wie Werte wählen Sie aus 3 Tabellen + count()

tbl_Publisher [Publisher_ID, addr,account-num,...,city]; 
tbl_Title [Title_ID, frequency, publisher,.., Publisher_ID]; 
tbl_Invoice [Invoice_ID, ordered_Date,...,Title_ID]; 

Ich möchte eine Liste der Titel von Publisher zurückzukehren und jeder Titel hat die gezählte Anzahl von Rechnungen enthält. in einem Ergebnissatz. Ich verwende eine gespeicherte Prozedur wie folgt:

PROCEDURE [dbo].[usp_GetTitlesbyPublisher] 
    -- Add the parameters for the stored procedure here 
    @PublisherID INT 


AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 


    -- Insert statements for procedure here 
    SELECT Title_ID,TitleName,pub_type,Frequency , Holdings ,tbl_Title.publisher ,section ,tbl_Title.Publisher_ID from tbl_Title, tbl_Publisher 
    where tbl_Title.Publisher_ID = tbl_Publisher.Publisher_ID 
    and @PublisherID = tbl_Publisher.Publisher_ID 

END 

Wie kann ich die Anzahl der Rechnung von jedem Titel zurückgeben?

+0

Markieren Sie die von Ihnen verwendeten dbms. Dieser Code ist produktspezifisch. – jarlh

+0

Eine gespeicherte Prozedur mit SQL Server, ich habe die erforderlichen Tags hinzugefügt. –

+0

Aber ich sehe kein SQL-Server-Tag. – jarlh

Antwort

1

können Sie wahrscheinlich dies erreichen mit einem GROUP BY:

SELECT t.Title_ID, t.TitleName, p.pub_type, 
     t.Frequency, Holdings, t.publisher, section, 
     t.Publisher_ID, count(i.Invoice_ID) as NoOfInvoices 
from tbl_Title t 
inner join tbl_Publisher p on t.Publisher_ID = p.Publisher_ID 
left join tbl_Invoice i on i.Title_ID = t.Title_ID 
where @PublisherID = p.Publisher_ID 
group by t.Title_ID, t.TitleName, p.pub_type, t.Frequency, 
     Holdings, t.publisher, section, t.Publisher_ID 
+0

Ich tat es nicht will die JOINS übernehmen :) – logixologist

+0

@logixologist scheint mir, es würde keinen Sinn machen, wenn sie nicht waren 'INNER JOIN's – Stephen

+0

Ich stimme zu. Das OP hat innere Joins, aber im alten Joinstil. –

0

nicht die Syntax auf diese geprüft.

SELECT COUNT(tbl_Invoice.Invoice_ID) 'InvoiceCount',Title_ID,TitleName,pub_type,Frequency, Holdings ,tbl_Title.publisher ,section ,tbl_Title.Publisher_ID 
FROM tbl_Title 
INNER JOIN tbl_Publisher ON tbl_Publisher.Publisher_ID = tbl_Title.Publisher_ID 
INNER JOIN tbl_Invoice ON tbl_Invoice.Invoice_ID = tbl_Title.Invoice_ID 
WHERE tbl_Publisher.Publisher_ID = @PublisherID 
GROUP BY 
    Title_ID,TitleName,pub_type,Frequency, Holdings ,tbl_Title.publisher ,section ,tbl_Title.Publisher_ID 
+0

Dies gibt nur einen Titel mit der Anzahl der Rechnungen zurück. Ich möchte alle Titel eines Verlags zurückgeben. –