合并SQL查询

时间:2011-02-21 07:50:46

标签: c# sql

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

第一个是:

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表中获得的平均成绩。

N.B。标记是针对工具的各个“章节”授予的。因此,要查找工具的所有标记,我们需要查看ES_TOOL_CHAPTER表以获取工具章节列表。工具章节是在ES_MARK表中接收标记的内容。

我已经尝试过分组和更多联接,但是我只是在分钟时变得更加困惑,所以我很感激任何有关此事的帮助。 我基本上是在寻找一个查询,它将返回第一个查询的所有结果,并附加一列平均标记。

感谢。

编辑:@tool代表工具ID。

1 个答案:

答案 0 :(得分:3)

如果您想要检索平均成绩和主要查询:

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