2016-05-12 7 views
1

私はchinookデータベースとsqlite3を使用しています。私の目標は、特定の顧客の請求書ID、請求書日付、および請求書の項目数を含む請求書のリストを返すことです。請求書に関する情報を取得し、1つのSELECTコマンドで請求書明細の数を返します

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 InvoiceId, InvoiceDate 
FROM invoices 
WHERE CustomerId = 2; 

リターンはかなり簡単です。私は、特定の請求書に対応するもの数えることができます:14

を返し

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

をしかしように私はリストを返したい:あなたは、内側があなたのクエリに参加する必要がある

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 invoiceid, invoicedate, (select count(*) from invoice_items where invoiceid = i.invoiceid) as CountInvoiceItems from invoices

すべて取得するために:私は、次のようなサブクエリを試してみてください、あなたのID

+0

わからないを使用する必要がありますDISTINCTが必要な場合は、COUNT(1)も同様に機能しますが、DISTINCTはコードの読者にとってより明白にする必要があります。 – boatcoder

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 

:それはこのようになります。結果を返します。それ以外の場合は、請求書12のためにwhere句を追加することができます。

0

特定のあなたは

に参加使用する必要があり、お客様は、ここでは例です:

SELECT InvoiceId, InvoiceDate, count(*) 
FROM invoices 
JOIN invoice_items ON invoices.InvoiceId=invoice_items.invoiceid 
GROUP BY invoices.InvoiceId 
関連する問題