在查询

时间:2016-10-13 08:29:03

标签: sorting ms-access sql-order-by sql-view design-view

有关如何使用相同材料的标准对行进行优先排序的任何想法?我需要在查询中捕获SG(除法)的值。我只有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;

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

Final Output Query - 我输出查询的图像

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;

2 个答案:

答案 0 :(得分:0)

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

SELECT * FROM YourTable t
WHERE NOT EXISTS(SELECT 1 FROM YourTable s
                 WHERE t.Material = s.material AND s.id > t.id)

答案 1 :(得分:0)

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

将此代码放在带有NO 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;
    `

我带来了正确的价值观。