2016-05-12 42 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 
相關問題