2016-10-31 6 views
0

私はこの質問が以前に頼まれていると確信していますので、正しい方向に私を助けてくださいが、私の質問はこれです。SQL Joinは複数の追加を引き起こします

私は2つのテーブルからの売上データを収集するSQLクエリがある - CustomerInvoiceを、そしてCustomerInvoiceDetail

CustomerInvoiceは、顧客名、住所などのように、請求書に関する一般的なデータを、含まれていますが、それはまた、貨物量が含まれています。

例テーブルデータ(インボイスコードあたり一つのレコード):

╔══════════════╦═══════════════╦════════════════════════════╦═════════╗ 
║ Invoice Code ║ Customer Name ║ Address     ║ Freight ║ 
╠══════════════╬═══════════════╬════════════════════════════╬═════════╣ 
║ INV-200000 ║ ABC Co  ║ 1 Apple Street, FRUITVILLE ║ 20  ║ 
╚══════════════╩═══════════════╩════════════════════════════╩═════════╝ 

CustomerInvoiceDetail請求書からの各ラインアイテムについての情報を含んでいます。 1つの請求書に複数の明細があることがよくあります。

例テーブルデータ(請求書コードごとに複数のレコード)

╔══════════════╦═════════════╦══════════╦═══════╦══════════╗ 
║ Invoice Code ║ Part Number ║ Quantity ║ Price ║ ExtPrice ║ 
╠══════════════╬═════════════╬══════════╬═══════╬══════════╣ 
║ INV-20000 ║ 50505  ║ 2  ║ 5  ║ 10  ║ 
╠══════════════╬═════════════╬══════════╬═══════╬══════════╣ 
║ INV-20000 ║ 51325  ║ 3  ║ 2  ║ 6  ║ 
╚══════════════╩═════════════╩══════════╩═══════╩══════════╝ 

これはサンプルの場合には意味CustomerInvoiceテーブルから複数の結果の私のJOIN結果を、意味し、貨物は$ 40になります。2行アイテムx $ 20貨物。

私のクエリは、次のように(表CustomerInvoiceDetail上の)行項目の数で(表CustomerInvoice上)貨物量を乗じ

私は現在取得しています何を、販売価格+である(ラインの貨物*数私は必要なものCustomerInvoiceDetail

上の項目、サンプルケースには(10 + 6 + 20販売価格+運賃の1つのインスタンスである)

SELECT 
    SUM(cid.ExtPrice + ci.Freight) AS 'Sales' 
FROM CustomerInvoice ci 
JOIN CustomerInvoiceDetail cid ON ci.InvoiceCode = cid.InvoiceCode 

誰もが何か提案やリソースを持っていた場合、彼らは私を指すことができますこれを研究するために、私は最も感謝しています!再度、感謝します。

+3

希望の出力は何ですか?おそらくそれは私だけですが、ここではっきりと*質問は表示されていません...あなたは明確にすることができますか? – Santi

+1

と質問は? – James

+0

@サンティ - あなただけではない... –

答えて

0

は、あなたは合計を行う前に集約する必要があります。

SELECT (cid.ExtPrice + ci.Freight) AS Sales 
FROM (SELECT SUM(ci.Freight) as Freight 
     FROM CustomerInvoice ci 
    ) ci CROSS JOIN 
    (SELECT SUM(cid.ExtPrice) as ExtPrice 
     FROM CustomerInvoiceDetail cid 
    ) cid; 

JOINのあなたは、各請求書の Freightの行数を乗算しているため。

+0

答えてくれてありがとうゴードン!私は単純なSQL言語に慣れていますが、答えを少し説明してもらえますか?あるいは、私はいくつかのドキュメントを指摘していますか? –

+0

ID列をグループ化して結合する必要はありませんか? – Hogan

+0

@Hogan。 。 。元の質問は全体の合計だけを探しているようです。 –

0

私はあなたがこのような何かを行うことでサブクエリを避けることができると信じて:

SELECT 
    cid.InvoiceCode, SUM(cid.ExtPrice) + MAX(ci.Freight) AS 'Sales' 
FROM CustomerInvoice ci 
JOIN CustomerInvoiceDetail cid ON ci.InvoiceCode = cid.InvoiceCode 
GROUP BY cid.InvoiceCode 

サンプル出力:

╔══════════════╦═════════════╗ 
║ Invoice Code ║ Sales  ║ 
╠══════════════╬═════════════╣ 
║ INV-20000 ║ 36   ║ 
╠══════════════╬═════════════╣ 
║ INV-20001 ║ 100   ║ 
╠══════════════╬═════════════╣ 
║ INV-20002 ║ 50   ║ 
╚══════════════╩═════════════╝ 

必要になる場合にのみ、1つの請求書を選択するようにWHERE InvoiceCode='INV-20000'を追加することができます。

+0

あなたはグループが必要です – Hogan

+0

@Hoganあなたは正しいです。私はこれがうまくいくと思います。 – Santi

+0

@サンティこの貨物コードをグループ化して、貨物を含む全販売価格を得る方法はありますか? 「MAX」を使用すると1つの貨物量しか選択されません。最大値は –

関連する問題