我有两个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。
答案 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。