【问题标题】:Set priority criteria in rows in Query在查询中的行中设置优先级条件
【发布时间】:2017-02-22 06:42:23
【问题描述】:

关于如何根据具有相同材料的标准对行进行优先级排序有什么想法吗?我需要在查询中捕获 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;

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;

【问题讨论】:

  • 格式你回答正确@anne
  • 你的问题很模糊。如果有任何关于具有 SG2011 部门的特定材料的记录,则检索与 SG2011 相关的价格(哪个价格、最低、最高,因为每个材料/部门组合可能有多行?)。否则,最低(?)价格?你都尝试了些什么?请包括任何查询。
  • 嗨@saurabhkamble 我已经编辑希望你能帮忙。谢谢

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


【解决方案1】:

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

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

【讨论】:

  • 我有一个名为 (Base_Query) 的基本查询,其中包含 227,288 行,我在表(Purchase 表)中加入了 300,00++ 行的部门和价格原始文件的来源。根据基本行,我执行的输出查询应该只有 227,288 个。它们的连接属性是“材料”列。我的问题是该查询只使用第一行重复材料,如上所示,对于 a9000 的重复材料,它采用了 FR390(价格:90)的价格,我需要 SG2011 的价值价格。
  • 发布您的查询以及实际和所需的输出。这可能有助于澄清你所追求的(你坚持完全模糊)。每当有人要求您澄清时,请务必回复。
【解决方案2】:

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

在 Material with 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;
    `

我提出了正确的价值观。

【讨论】:

    猜你喜欢
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    相关资源
    最近更新 更多