Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql MS Access联合数据筛选器和条件_Sql_Ms Access - Fatal编程技术网

Sql MS Access联合数据筛选器和条件

Sql MS Access联合数据筛选器和条件,sql,ms-access,Sql,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

我一直在寻找一种解决方案来合并两个表并计算其条目,这就是我找到这段代码的原因:

它可以工作,但是,我还需要过滤它并添加一个条件

我所拥有的:

表存货

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      
我能够编码的内容(如果Item1有来自03-08-17和03-08-17的条目,我有两行):

我需要下表和标准,只显示在同一周内添加的条目(合并同一周内涉及一个项目的条目)

我需要这个,因为以后我想制作一个图表并按团队进行筛选,如果可能的话,还可以按一周进行筛选。(显示第30周或第30周和第31周的条目)

我的代码(缺少“团队”列,但它显示了几个星期):

编辑

因此,似乎我需要在给定的行中始终具有日期a和日期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
我需要将行动A和行动B组合到同一周,如下所示:

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:

我已经将表类型更改为类型_Tbl,它现在有两列:类型_Typ和团队。在表Inventory中,我将列类型更改为类型_Inv。因此,据我所知,目前我没有使用任何受限SQL单词。问题在于您的第二个查询,我得到消息“Reference to field”Team“可以引用FROM函数中列出的多个表”

修改了第一个查询(第二个查询没有更改)

编辑答案: 我们将采用两步方法

步骤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
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                
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;
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)
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