おそらく私は今週の週末に十分な休息を取っていないと思うかもしれませんが、私はそれを直すことはできません。 ((FKの区分とPKのProductID)Sql group by and join issue
- 製品(FK InvoiceIDとPK ShipmentID)
- 出荷
- 請求書(FK ShipmentIDとFKのProductIDとPK ShippedProductsID)
- ShippedProducts: 私は、これらのテーブルを持っていますFK得意先とのPK InvoiceID)
- お客様(FK CountryIdとPK得意先)
- 国(PK CountryID)
残念ながら、他の方法でスキーマを説明することはできません。私がデータ構造のより良い概観を与えることができるかどうか私に教えてください。
ここは私のSQLです(データベースは、Microsoft SQL Server 2008の場合)
SELECT countries.countryid,
countryname,
isnull(round(sum(InvoiceTotal), 2),0) as TotalInvoice,
count(invoices.invoiceid) as nrOfInvoices,
count(shipments.shipmentid) as nrOfShipments
FROM INVOICES
inner join customers on invoices.CustomerID = customers.customerid
inner join countries on customers.CountryID = COUNTRIES.CountryID
inner join shipments on shipments.invoiceid = invoices.invoiceid
inner join ShippedProducts on ShippedProducts.ShipmentID = shipments.ShipmentID
group by countryname, COUNTRIES.CountryID, CurrencyName, CURRENCIES.CurrencyID
私がコメントアウトした場合は、最後のインナーは、私は、内側参加するとき、私は請求書などの権利数を取得しますが、(shippedproductsに)参加します出荷された製品数は、請求書をカウントしませんが、何とか出荷された製品の数をカウントします。 グループにもっと多くのものを追加した場合、それは国によってもうグループ化されず、各請求書と発送品などの行があります。 私は何とかこの月曜日の私の間違いを見ることはできません。多分私はもっとコーヒーが必要です。
なぜこの結合が必要ですか?あなたはそのテーブルの列を取得していますか? –
はい、 'count(ShippedProducts.ShipmentProductsID)as totalProd' –
' count(distinct invoices.invoiceid)をnrOfInvoices'として試してください。 – nscheaffer