【问题标题】:SQL Select on Records that Meet Criteria from Another TableSQL 从另一个表中选择符合条件的记录
【发布时间】:2023-04-07 20:44:01
【问题描述】:

我有一个非常复杂的查询,并试图给出一个我遇到问题的子表的简单示例,如果您需要更多信息或上下文,请告诉我。

我在这里提交了一个包含一些示例数据的 CSV 文件: https://drive.google.com/open?id=0B4xdnV0LFZI1dzE5S29QSFhQSmM

我们做蛋糕,我们 99% 的蛋糕都是我们自己做的。 1% 是当我们从分包商那里收到蛋糕并且我们“接收”和“审核”它时。

我想做的是这样写:

SELECT 
Cake.Cake
Instruction.Cake_Instruction_Key
Steps

FROM
Cake
Join Instruction 
ON  Cake.Cake_Key = Instruction.Cake_Key
JOIN Steps
ON Instruction.Step_Key = Steps.Step_Key

WHERE
MIN(Steps.Step_Key) = 1

这失败了,因为你不能在 WHERE 子句中有一个聚合。

期望的结果是:

Cake C 13 Receive
Cake C 14 Audit
Cake D 15 Receive
Cake D 16 Audit

提前感谢您的帮助!

【问题讨论】:

    标签: sql-server tsql join filtering aggregate-functions


    【解决方案1】:

    看看 HAVING 关键字: https://msdn.microsoft.com/en-us/library/ms180199.aspx

    它的工作方式与 WHERE 子句大致相同,但用于 GROUP BY 子句之后的聚合函数。

    请注意,但这可能会很慢。您应该尝试在 WHERE 中尽可能过滤掉记录的数量,甚至可以考虑使用临时表将数据聚合到第一个。

    【讨论】:

      【解决方案2】:

      您所说的是 GROUP BY/HAVING 子句,因此在您的情况下,您需要添加类似

      GROUP BY Cake.Cake, Instruction.Cake_Instruction_Key, Steps
      HAVING MIN(Steps.Step_Key) = 1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-26
        • 2022-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-28
        • 1970-01-01
        相关资源
        最近更新 更多