【问题标题】:how to select values from 3 tables + count()如何从 3 个表中选择值 + count()
【发布时间】:2017-03-31 14:18:35
【问题描述】:

我有三个表:

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

我想按出版商返回一个标题列表,每个标题都有它包含的发票数量。在一个结果集中。 我正在使用如下存储过程:

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

如何返回每个 Title 的 Invoice 数量?

【问题讨论】:

  • 标记您正在使用的 dbms。该代码是特定于产品的。
  • 一个使用SQL Server的存储过程,我加了需要的标签。
  • 但是我没有看到 sql-server 标签。
  • 我在上面的表格中看不到足够的信息,但您正在寻找的是 GROUP BY...。我假设 INVOICE_ID 在每个表格中。您需要在 SELECT 中添加 COUNT(INVOICE_ID) 并以 GROUP BY 结尾并列出您选择的所有列。
  • 您应该养成使用 ANSI-92 样式连接的习惯,它们已经存在 25 年了。 sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/…

标签: c# sql sql-server database stored-procedures


【解决方案1】:

您可能可以通过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

【讨论】:

  • 我不想假设 JOINS :)
  • @logixologist 在我看来,如果他们不是 INNER JOINs
  • 我同意。 OP 具有内部联接,但采用旧的联接样式。
  • 这只返回列表的第一条记录,我怎样才能返回一个出版商拥有的所有标题?
  • 明白了,我今天学到了一些东西..内连接很有用! @斯蒂芬
【解决方案2】:

没有检查这个的语法。

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  

【讨论】:

  • 这只会返回一个包含发票数量的标题。我想归还出版商所有的书名。
猜你喜欢
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 2011-07-06
  • 2011-10-06
  • 1970-01-01
  • 2021-07-13
  • 2013-02-02
  • 2012-03-12
相关资源
最近更新 更多