1

ここで質問に対する答えがありました:

=SUMPRODUCT(($A$1:$A$10=A1)*($B$1:$B$10=B1))

=COUNTIFS(G:G,G2,H:H,H2)

どちらも仕事を成し遂げますが、非常に遅いです。10万以上の行ではなく、SQLでこれを行う必要があると思います。

私が知りたいのは、SQLで同じ数を達成するにはどうすればよいですか?

独自のベンダーをテーブルに配置し、製品をテーブルvendorsIDから引き出しながら製品をテーブルに挿入できると思いvendorsます。

この時点で、2 つのテーブルが作成されます。このvendorsテーブルには、ベンダーごとの製品数 (上記のリンクで説明したように) 用の別の列と、製品名とベンダー ID を含む製品テーブルを追加できます。

問題は、このクエリがどのように見えるかです。1 つのテーブルをクエリして、他のテーブルに製品とベンダー ID を入力しますが、実際に必要な計算 (ベンダーごとの一致する製品の量) を行うことは理解できたと思いますが、完全に失われています。

助言がありますか?

4

2 に答える 2

1

テーブル構造をExcelのように仮定すると、つまり1つのテーブル: http://sqlfiddle.com/#!2/fb9f3/1

SQL は次のようになります。

SELECT vendor, product, SUM(qty) from tblOrder 
GROUP BY vendor, product 
于 2012-06-18T07:45:53.900 に答える
1

2 つのテーブルに値を入力したと仮定します。

ベンダー:

  • IdName

製品:

  • IdVendorIdName...

次に、次のことを行います。

ベンダーごとに同一の製品名の数をカウントします。

次のようにする必要があります。

SELECT v.Id, v.Name, COUNT(p.Id) AS 'Total Products'
FROM Vendors v INNER JOIN Products p ON v.Id = p.VendorId
GROUP BY v.Id, v.Name

編集:このクエリから取得したこの結果セットを別のテーブルに挿入する場合は、次のようなINSERT ... SELECTSyntaxを使用する必要があります。

INSERT INTO NewTable(VendorId, VendorName, ProductsCount)
SELECT v.Id, v.Name, COUNT(p.Id) AS 'Total Products'
FROM Vendors v INNER JOIN Products p ON v.Id = p.VendorId
GROUP BY v.Id, v.Name

Edit2:ベンダー リストが既にある既存のテーブルを更新するには、テーブルを結果セットと結合して更新する必要があります。

UPDATE ExistingTable t
INNER JOIN 
(
    SELECT v.Id, v.Name, COUNT(p.Id) AS 'TotalProducts'
    FROM Vendors v INNER JOIN Products p ON v.Id = p.VendorId
    GROUP BY v.Id, v.Name
) v ON t.VendorId = v.Id
SET t.VendorId = v.Id, t.VendorName = v.Name, t.ProductsCount = v.TotalProducts 
于 2012-06-18T07:45:26.327 に答える