0

关于如何根据具有相同材料的标准对行进行优先级排序的任何想法?我需要在查询中捕获 SG(division) 的值。我的基本查询只有 227,288 行,从原始文件中得到的这些值大约是 300,00++,我的问题是每当我使用基数运行查询时,它只从行中捕获第一个材料。

ID                MATERIAL                DIVISION                  SCOP(price)

1                 a9000                   FR390                     90
2                 b6790                   TB900                     20
3                 a9000                   SG2011                    35
4                 b6790                   EU8089                    90

从上面的示例中,从 227,288 个文件中,对于材料 a9000,我得到的价格值为 90,而据推测我需要从 SG2011 获得 35 的值,除了 SG2011,其他部门的每个值都可以,即对于 b6790 没关系有20的价格值。师SG2011价格是材料优先。

我正在使用 MS Access 2007,我在设计视图或 SQL 视图中做事。希望你们能用简单的代码帮助我..(iff..statements 或只是在设计视图中..)或 MS Access 中的 SQL 视图

编辑

下面是我的 SQL 查询(查询测试 - 这不会离开加入基本查询,因为它不符合行数但我能够显示多个材料)

    SELECT Base_CSC.ID, Base_CSC.Material, SC_and_Purchase_Price.[Logistic Ref], SC_and_Purchase_Price.[Commercial Ref], Left([Division],2) & ([Commercial Ref]) AS [Comm Ref], Left([Division],2) & ([Logistic Ref]) AS [Log Ref], IIf(Left([Comm Ref],'2')="SG",[SCOP],'') AS [SCOP SG], SC_and_Purchase_Price.[SC in AUD] AS SCOP
FROM Base_CSC LEFT JOIN SC_and_Purchase_Price ON (Base_CSC.Material = SC_and_Purchase_Price.[Commercial Ref]) AND (Base_CSC.Material = SC_and_Purchase_Price.[Logistic Ref])
ORDER BY Base_CSC.ID;

查询测试 - 我的测试查询图像以显示材料。如图 材料:LV433620 有 3 个材料结果。但是一旦我运行我的最终查询

最终输出查询 - 我的输出查询的图像

LV433620 材料在我需要 SCOP SG 的输出时取了第一行的值 - (我只是做了 scop SG 字段来区分)所以而不是 257.42。我需要材料 LV433620 的 SCOP 值 215.50。

下面是最终输出查询 SQL 视图

SELECT Base_CSC.ID, Base_CSC.Material, Base_CSC.[Vendor Reference], Base_CSC.[Default Vendor], First(IIf(IsNull([scop3_v2.SCOP]),[scop3_v2_1.SCOP],[scop3_v2.SCOP])) AS SCOP
FROM (Base_CSC LEFT JOIN scop3_v2 AS scop3_v2_1 ON Base_CSC.Material = scop3_v2_1.scop1.SCOPLookup) LEFT JOIN scop3_v2 ON Base_CSC.Material = scop3_v2.scop2.SCOPLookup
GROUP BY Base_CSC.ID, Base_CSC.Material, Base_CSC.[Vendor Reference], Base_CSC.[Default Vendor]
ORDER BY Base_CSC.ID;
4

2 回答 2

0

不确定我是否理解,但对于每个您可以使用DIVISION的最低 ID :MATERIALNOT EXISTS()

SELECT * FROM YourTable t
WHERE NOT EXISTS(SELECT 1 FROM YourTable s
                 WHERE t.Material = s.material AND s.id > t.id)
于 2016-10-13T08:32:33.000 回答
0

已解决:从发布的问题中,我创建了一系列查询。从我创建的原始源表中第一个:具有唯一计数的材料(使用标准 1 完成此操作)第二个:没有 SG 部门的材料和第三个:具有 SG 部门的材料,

在没有 SG 的材料的查询下拥有此代码

`SCOPE: IIf([Query_SC_and_Purchase_Price_Scope_SG].[SCOPE] Is Null,[Query_SC_and_Purchase_Price_Scope_NO_SG].[SCOPE],[Query_SC_and_Purchase_Price_Scope_SG].[SCOPE])`

这适用于带有 SG 代码查询的材料

   SCOP: IIf([Query_SC_and_Purchase_Price_Scope_SG].[SCOPE] Is Null,[Query_SC_and_Purchase_Price_Scope_NO_SG].[SCOPE],[Query_SC_and_Purchase_Price_Scope_SG].[SCOPE])

收集所有这些数据并检查我创建了一个 UNION ALL 查询

 `SELECT Query_SC_and_Purchase_Price_Scope_Unique.* 
    FROM Query_SC_and_Purchase_Price_Scope_Unique
    UNION ALL
    SELECT Query_SC_and_Purchase_Price_Scope_SGNOSG_SG.* 
    FROM Query_SC_and_Purchase_Price_Scope_SGNOSG_SG
    UNION ALL SELECT Query_SC_and_Purchase_Price_Scope_SGNOSG_NOSG.*
    FROM Query_SC_and_Purchase_Price_Scope_SGNOSG_NOSG;
    `

我提出了正确的价值观。

于 2016-10-18T03:28:45.577 回答