2016-05-12 46 views
1

我正在使用chinook数据库和sqlite3。我的目标是返回发票清单,其中包含发票编号,发票日期和特定客户发票上的项目数量。前两个是非常简单的,获取有关发票的信息,并通过单个SELECT命令返回发票项目的数量

SELECT InvoiceId, InvoiceDate 
FROM invoices 
WHERE CustomerId = 2; 

回报:

1 |2009-01-01 00:00:00  
12 |2009-02-11 00:00:00  
67 |2009-10-12 00:00:00  
196|2011-05-19 00:00:00  
219|2011-08-21 00:00:00  
241|2011-11-23 00:00:00  
293|2012-07-13 00:00:00 

然而,发票行项目是另一个表。我可以指望的是对应于特定的发票与个位:

SELECT count(*) 
FROM invoice_items 
WHERE Invoiceid = 12; 

返回14

但我想回到像一个列表:

1 |2009-01-01 00:00:00|2  
12|2009-02-11 00:00:00|14 
+0

您应该使用SQL的JOIN http://www.w3resource.com/sqlite/sqlite-inner-join.php – micrub

回答

0

您需要在查询内部联接;它会是这个样子:

SELECT 
    invoices.InvoiceId, invoices.InvoiceDate, 
    COUNT(DISTINCT(items.ID)) AS Items 
FROM 
    invoices 
JOIN 
    invoice_items AS items ON invoices.ID = itemsID 
GROUP BY invoices.InvoiceId 

当然,我猜你ID列的名称

+0

不知道你为什么会需要DISTINCT,COUNT(1)也可以工作,但DISTINCT应该使代码读者更加明显。 – boatcoder

0

尝试像下面这样的子查询:

select invoiceid, invoicedate, (select count(*) from invoice_items where invoiceid = i.invoiceid) as CountInvoiceItems from invoices

让所有的结果,否则您可以将您的where子句添加回发票12中。

0

要获取特定发票客户应该使用加入

这里有一个例子:

SELECT InvoiceId, InvoiceDate, count(*) 
FROM invoices 
JOIN invoice_items ON invoices.InvoiceId=invoice_items.invoiceid 
GROUP BY invoices.InvoiceId 
相关问题