【问题标题】:Merging SQL queries合并 SQL 查询
【发布时间】:2011-02-21 07:50:45
【问题描述】:

我有两个从 C# winform 运行的 SQL 查询,我想合并它们。

第一个是:

SELECT * FROM ES_TOOL INNER JOIN ES_HARDWARE ON ES_HARDWARE.eshw_ID = ES_TOOL.ESTOOL_HARDWARE 
                INNER JOIN ES_PAYMENT on ES_payment.espay_id = es_TOOL.estool_payment

这列出了所有工具及其相关的付款和硬件要求。

第二个在第一个查询返回的每条记录上运行,通过 c# for 循环:

SELECT avg(a.esmrk_value) from ES_MARK a Inner Join ES_TOOL_CHAPTER b 
on  a.esmark_tool_chapter= b.estch_id WHERE b.estch_tool=@tool

这会返回每个工具在 es_mark 表中获得的平均成绩。

注意对工具的各个“章节”进行评分。因此,要找到工具的所有标记,我们需要查看 ES_TOOL_CHAPTER 表以获取工具章节列表。工具章节是在 ES_MARK 表中接收标记的内容。

我尝试了分组和更多的加入,但我只是越来越困惑,所以我很感激任何关于此事的帮助。 我基本上是在寻找一个查询,它将返回第一个查询的所有结果以及一个附加列作为平均标记。

谢谢。

编辑:@tool 代表工具 ID。

【问题讨论】:

  • 您需要在 C# 中执行两个单独的查询并将它们连接起来,还是在寻找单个 SQL 查询?
  • @tool参数代表什么列?
  • @jon:正在寻找单个 SQL 查询。

标签: c# sql


【解决方案1】:

如果您想与主查询一起检索平均成绩:

SELECT *
FROM ES_TOOL
  INNER JOIN ES_HARDWARE ON ES_HARDWARE.eshw_ID = ES_TOOL.ESTOOL_HARDWARE 
  INNER JOIN ES_PAYMENT on ES_payment.espay_id = es_TOOL.estool_payment
  LEFT JOIN (
    SELECT b.estch_tool, avg(a.esmrk_value) AvgValue
    FROM ES_MARK a
      Inner Join ES_TOOL_CHAPTER b 
        ON a.esmark_tool_chapter = b.estch_id
    GROUP BY b.estch_tool
  ) g ON ES_TOOL.ToolColumn =  g.estch_tool

ToolColumn 替换为正确的列名。

注意:不推荐SELECT *,请阅读This question

【讨论】:

  • 我收到“无法绑定多部分标识符“b.estch_tool”。”错误。 16 级,状态 1,第 1 行。显然。有什么想法吗?
  • @dave 更新为g.estch_tool
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-26
  • 2011-04-02
  • 1970-01-01
  • 1970-01-01
  • 2016-07-26
  • 2012-06-14
相关资源
最近更新 更多