1

テーブルにいくつかのデータがあります。2 番目の表にまとめたデータの一部と、3 番目の表にまとめたデータがあります。

それらをUNION ALL CORRESPONDINGし、WHEREコマンドを使用してメインテーブルから冗長行を除外したい

私の問題は、要約されたテーブルのデータの一部がメイン テーブルに対して冗長であるため、3 つのテーブルの列番号が一致していないことです。明らかに、JOIN を使用して、一緒に使用したときにすべてのテーブルが同じ列になるようにしたいと考えています。

私の問題は、結合をユニオンに入れる方法、またはユニオンを結合する方法、または2つを何らかの方法でメッシュ化する方法に頭を悩ませることができないことです

2 つのサマリー テーブルの列名は、メイン テーブルの列名のサブセットです。まだ結合が必要ですか?

これまでに行ったことは次のとおりです(ほとんどがMS Accessによって自動生成され、いくつか追加されています):

SELECT 
[QRY7 time report Query].ResID, 
First([QRY7 time report Query].[ResID(T)]) AS [Name], 
[QRY7 time report Query].Baselocation, 
[QRY7 time report Query].Destination,
[QRY7 time report Query].Project, 
[QRY7 time report Query].[Cust_id(T)],
[QRY7 time report Query].[Hrs P1], 
[QRY7 time report Query].[Hrs P2],
[QRY7 time report Query].[Hrs P3], 
[QRY7 time report Query].[Hrs P4], 
[QRY7 time report Query].[Hrs P5], 
[QRY7 time report Query].[Hrs P6]

FROM 
[Qry8a Overhead Summary] 
INNER JOIN 
([Qry8b Work From Base Summary] 
INNER JOIN 
[QRY7 time report Query] 
ON 
[Qry8b Work From Base Summary].ResID = [QRY7 time report Query].ResID
ON[Qry8a Overhead Summary].ResID = [QRY7 time report Query].ResID 

UNION CORRESPONDING
(ResID,[ResID(T)],Baselocation,[Hrs P1],[Hrs P2],[Hrs P3],[Hrs P4],[Hrs P5],[Hrs P6])

SELECT  
[Qry8a Overhead Summary].[ResID(T)],
[Qry8a Overhead Summary].Baselocation,
[Qry8a Overhead Summary].[Hrs P1],
[Qry8a Overhead Summary].[Hrs P2],
[Qry8a Overhead Summary].[Hrs P3],
[Qry8a Overhead Summary].[Hrs P4],
[Qry8a Overhead Summary].[Hrs P5],
[Qry8a Overhead Summary].[Hrs P6]
FROM 
[Qry8a Overhead Summary] 

UNION CORRESPONDING
(ResID,[ResID(T)],Baselocation,[Hrs P1],[Hrs P2],[Hrs P3],[Hrs P4],[Hrs P5],[Hrs P6])

SELECT  
[Qry8b Work From Base Summary] .[ResID(T)],
[Qry8b Work From Base Summary] .Baselocation,
[Qry8b Work From Base Summary].[Hrs P1],
[Qry8b Work From Base Summary].[Hrs P2],
[Qry8b Work From Base Summary].[Hrs P3],
[Qry8b Work From Base Summary].[Hrs P4],
[Qry8b Work From Base Summary].[Hrs P5],
[Qry8b Work From Base Summary].[Hrs P6]
FROM 
[Qry8b Work From Base Summary]
GROUP BY 
[QRY7 time report Query].ResID,
[QRY7 time report Query].Baselocation, 
[QRY7 time report Query].Destination, 
[QRY7 time report Query].Project, 
[QRY7 time report Query].[Cust_id(T)], 
[QRY7 time report Query].[Hrs P1],
[QRY7 time report Query].[Hrs P2], 
[QRY7 time report Query].[Hrs P3],
[QRY7 time report Query].[Hrs P4], 
[QRY7 time report Query].[Hrs P5],
[QRY7 time report Query].[Hrs P6], 
[QRY7 time report Query].Cust_id

HAVING 
((([QRY7 time report Query].Destination)<>"D-" &[QRY7 time report Query].[Baselocation]) 
AND 
(([QRY7 time report Query].Cust_id)<>2))

ORDER BY [QRY7 time report Query].ResID;

私が知る限り (SQL ではまだ新しい)、Time Report からデータを取得し、MS Access が ResID の一致を認識できるようにサマリー テーブルを結合します。次に、提供されたフィールドの新しいテーブルを作成し、それらが対応する場所で、QRY7destination <> baselocation (Overheads で要約) および Cust_Id <> 2 (base から word で要約) を含むデータを確認します。

今、それが言っているのは、From 構文が間違っているということですが、これがどこにあるのかわかりません。私がこのすべてを正しく行っているかどうかさえわかりません

編集:

「マスター」テーブルのデータのサンプルを次に示します。

ResID      Nm    Base     Proj      Destination Cust_id     P1     P2     P3
MJW     Mary  LONDON   Project1              Overhead           
                       Project2  A-LONDON    Overhead                  0.39%
                       Project3  UK          Overhead   1.24%       
                       Project12 B-LONDON    232        19.47% 60.02%  0.82%
                       Project13             232        12.44%      
                       Project16 A-LONDON    56                3.5%    
                       Project17 B-LONDON    56                        9.8%

オーバーヘッドの要約:

ResID Nm     Base    Cust_id    P1    P2     P3
MJW   Mary   LONDON  Overhead   4.61% 2.31%  3.13%

そしてワークフォームベースまとめ

ResID Nm     Base    Cust_id    P1    P2     P3
MJW   Mary   LONDON  232        0.43% 5.51%  0.09%
MJW   Mary   LONDON  562        0.43% 5.51%  0.09%

ここにそれらが統合されています

R_Id Nm      Base    Dest        Proj      Cust_id       P1      P2     P3
MJW Mary    LONDON  UK          Overhead  SumOver       1%      7.4%   4.8% 
                     A-London    Project1  SumBaseCust1  1.68%   0%     24.93%
                     B-London    Project2  SumBaseCust1  2.48%   0%     4.3%
                                 Project13 232           10 %           0
                     B-LONDON    Project16 56            3.5%    
                     B-LONDON    Project17 56                    9.8%

一部のエントリは空白/null です。

メモリからの 2 つのサマリー テーブルには、ResID、ProjectID、およびパーセンテージが含まれています。Work From Base テーブルには、これに加えて Customer-Id が含まれています。Bob の上位 2 つのエントリは、2 つのサマリー テーブルから取得する必要があります。3 番目のエントリは、削除しないエントリの例です。4 番目のエントリは、ベースロケーションと同じ宛先であるため、結果のテーブルから削除されます (私は一部の行が除外されることを指摘できるように追加しました)

列の数を一致させるには JOIN する必要があり (そうですか?)、行をつなぎ合わせるには UNION を使用する必要があります (そうですか?)。それらを組み合わせるにはどうすればよいですか?

4

1 に答える 1

0

一意の値をオンにして追加クエリを使用することは理にかなっていますか? 2 つの集計テーブルから始めて、最後に最初のテーブルを追加しますか?

追加ステートメントを使用すると、どの列がどの列と一致するかを選択でき、一意の値によりデータの複製が防止されます。

または、一意に保ちたいフィールド全体に主キーを設定した新しいテーブルに追加できますか?

于 2012-08-09T20:44:39.397 に答える