1

それで、私が持っている2つの質問があります。1つは、効率化のために本当に正しいアプローチを行っているかどうかです。2 つのテーブルのフィールドが一致するかどうかに応じて異なる名前を吐き出し、Type という名前の新しい列を作成しようとしています。ネストされた IF ステートメントです。クエリは 2 ~ 3 秒で簡単に終了しますが、重複が多いため、ItemName、次に Type で GROUP BY したいと考えています。それを行った後、クエリは終了せず、タイムアウトし、10 分間試行しても複雑すぎると主張します。また、DISTINCT と FIRST を使ってみましたが、うまくいきませんでした。壮大な計画では、このクエリを他のクエリと組み合わせて、タイプ別にグループ化された実行中の合計を作成したいと考えています。したがって、最終的なクエリを機能させるには、このクエリで GROUP BY を実行できることが重要です。以下はクエリです。

SELECT Inventory_All.ItemName, 

IIF(Inventory_All.[ItemName]=Products.[QB Assembly Name], "Assembly Part",
IIF(Inventory_All.[ItemName]=Products.[QB Service Part Name],"Service Part",
IIF(Inventory_All.[ItemName]=Components.[QB Component Name],Components.Type,"Other") )) AS Type

FROM 
(Inventory_All LEFT JOIN Products ON Inventory_All.ItemName=Products.[QB Assembly Name] OR Inventory_All.ItemName=Products.[QB Service Part Name]) LEFT JOIN Components ON Inventory_All.ItemName=Components.[QB Component Name];

同様の問題を抱えている他の人を読み、インデックスを作成しようとしましたが、役に立たなかったようです. GROUP BY 関数がほとんど処理する必要がないこのクエリを再作成する必要があるようです。ただし、この形式の SQL と GROUP BY がどのように動作するかはわかりません。GROUP BY (または同様の関数) が機能するようにクエリを単純化するためのヒントはありますか?

助けてくれてありがとう。

4

2 に答える 2

1

おそらくこれらの行に何か:

SELECT Inventory_All.ItemName, Type
FROM (
   SELECT "Assembly Part" As TYPE 
   FROM Inventory_All 
   LEFT JOIN Products ON Inventory_All.ItemName=Products.[QB Assembly Name]
   UNION
   SELECT "Service Part" As TYPE 
   FROM Inventory_All 
   LEFT JOIN Products ON Inventory_All.ItemName=Products.[QB Service Part Name]
   UNION
   SELECT "Other" As TYPE 
   FROM Inventory_All.ItemName=Components.[QB Component Name]) As x
于 2012-08-03T20:55:46.130 に答える
0

クエリを再構築したいと思います。各パーツに 1 つずつ、合計 3 つの個別の結合を行います。次に、各部品タイプのアイテムごとにカウントを維持します。1 列はアセンブリ、1 列はサービス、1 列はコンポーネントです。

各タイプの名前と出現回数を含む結果セットが得られます。次に、それでやりたいことをします。

モバイル デバイスを使用しているため、SQL を入力できません。

于 2012-08-03T23:39:03.867 に答える