2017-08-03 12 views
2

私は労働組合へのソリューションのための2つのテーブルを見て、そのエントリを数えたが、それは私がこのコードの一部を発見した理由ですフィルタリングして条件を追加します。MS Accessの連合データフィルタおよび基準

私が持っているもの:私は、コードすることができた何

表インベントリ

Action_A Date_Action_A Action_B Date_Action_B Type 
Item1 Date   Item2 Date   A 
Item2 Date   Item5 Date   A 
Item3 Date   Item3 Date   B 
and so on, all combinations 

テーブルタイプ

Type Team 
A Team1 
B Team2  

(アイテム1は、03-08-17と03-からのエントリを持っている場合08-17 2行あり):

Items Count_Action_A Count_Action_B Date_A Date_B 
Item1 1    1    Week30 Week31 
Item1 1    0    Week31 Week31 
and so on 

後、私は、グラフやフィルタを作りたいので、私は、私はこれを必要とする同じ週に追加エントリのみが表示され、以下の表と基準(同じ週以内に1つのアイテムに関するエントリがマージされている)

Items Count_Action_A Count_Action_B Date_A Date_B Team 
Item1 2    1    Week31 Week31 Team1 
Item2 0    2    Week31 Week31 Team2 

が必要チームによると、可能ならば、また週でフィルタ(week30から、またはweek30および31からのショーのエントリ)

私のコード(チームの柱の欠如、butitは週に私を示してい):。

SELECT Items, Date_A, Date_B, COUNT(A_Type) AS Count_Action_A, COUNT(B_Type) AS Count_Action_B, DatePart("ww",[Date_A]) AS Week_A, DatePart("ww",[Date_B]) AS Week_B 
FROM (SELECT Action_A as Items, Date_Action_A as Date_A, Date_Action_B as Date_B, 1 AS A_Type, NULL AS B_Type FROM Inventory 
     UNION ALL 
     SELECT Action_B, Date_Action_B, Date_Action_A, NULL, 1 FROM Inventory) 
WHERE Items IS NOT NULL 
GROUP BY Items, Date_A, Date_B 
ORDER BY Items; 

What is in the table and what is displayed on the graph, it does not work as intended.

EDIT

だから、私はいつもDate_AとDate_Bの両方で同じ週所定のラインを持っている必要があるようです。私はこのように、同じ週にAction_AとAction_Bを結合する必要が

Items Count_Action_A Count_Action_B Week_A Week_B Team 
Item1 1    1    Week31 Week31 Team1 
Item1 1    1    Week31 Week32 Team1 

Items Count_Action_A Count_Action_B Week_A Week_B Team 
Item1 2    1    Week31 Week31 Team1 
Item1 0    1    Week32 Week32 Team1 

が可能ということです

は、今のところ私はこのような状況がありますか?

EDIT2 グループ化処理:

Items Count_Action_A Count_Action_B Week_A Week_B 
Item1 1    1    Week31 Week31 - OK, stays 
Item1 1    1    Week30 Week31 - is transferred to: item1 1 0 Week30 Week30 and item1 0 1 Week31 Week31     

編集3:Type_Typとチーム:

私は今、2つの列がありType_Tblにテーブルの種類を変更しました。テーブルインベントリでは、TypeをType_Invに変更しました。だから、現時点で私が知る限り、私は制限されたSQL単語を使用しません。 2番目のクエリで問題が発生しました。 "フィールドへの参照"というメッセージが表示されます。チーム "FROM関数にリストされている複数のテーブルを参照できます"。

変更された最初のクエリ(2番目のクエリに変更はありません)。

SELECT Items, TheAction, Date_Action, Week, Action_Type, AOrB, Team 
FROM (SELECT Items, Action_A As TheAction, Date_Action_A As Date_Action, DatePart("ww",[Date_Action_A]) As Week, Type_Inv As Action_Type, "A" As AOrB From Inventory 
UNION ALL 
SELECT Items, Action_B As TheAction, Date_Action_B As Date_Action, DatePart("ww",[Date_Action_B]) As Week, Type_Inv As Action_Type, "B" As AOrB 
From Inventory) AS A INNER JOIN Type_Tbl ON Type_Tbl.[Type_Type]=A.Action_Type; 

答えて

1

編集された回答: 2段階アプローチを行います。

ステップ1:データを正規化し、チームに参加し、SQLキーワードを列名として使用しないようにします。 NormalizedData

としてこのクエリを保存
SELECT Items, TheAction, Date_Action, Week, Action_Type, AOrB, Team 
FROM 
(SELECT Action_A AS Items, Action_A As TheAction, Date_Action_A As Date_Action, DatePart("ww",[Date_Action_A]) As Week, [Type] As Action_Type, "A" As AOrB 
From Inventory 
UNION ALL 
SELECT Action_B AS Items, Action_B As TheAction, Date_Action_B As Date_Action, DatePart("ww",[Date_Action_B]) As Week, [Type] As Action_Type, "B" As AOrB 
From Inventory) As A INNER JOIN [Type] ON ([Type].[Type] = A.Action_Type) 

ステップ2:適切に非正規化してデータをカウント

SELECT A.Items, Count_Action_A, Count_Action_B, A.Week As Week_A, A.Week As Week_B, A.Team 
FROM 
(SELECT Items, Count(TheAction) As Count_Action_A, Week, Team FROM NormalizedData WHERE AOrB = "A" GROUP By Items, Team, Week) As A 
LEFT JOIN (SELECT Items, Count(TheAction) As Count_Action_B, Week, Team FROM NormalizedData WHERE AOrB = "B" GROUP By Items, Team, Week) AS B ON A.Items = B.Items AND A.Week = B.Week 
UNION 
SELECT B.Items, 0 As Count_Action_A, Count_Action_B, B.Week As Week_A, B.Week As Week_B, B.Team 
FROM 
(SELECT Items, Count(TheAction) As Count_Action_B, Week, Team FROM NormalizedData WHERE AOrB = "B" GROUP By Items, Team, Week) AS B 
LEFT JOIN (SELECT Items, Count(TheAction) As Count_Action_A, Week, Team FROM NormalizedData WHERE AOrB = "A" GROUP By Items, Team, Week) As A ON A.Items = B.Items AND A.Week = B.Week 
WHERE A.Items Is Null 
関連する問題