我有6张彼此相关的表格。我有一个JOIN查询收集所有数据。我首先提供cpv_id作为来自用户的变量,然后最后我需要获得与该cpv_id相关的每个公司的报告(通过它们之间的许多表)。
基本上,这就是流程:
我从用户那里得到 cpv_id ,我在 club_offer_cpv 表中找到它,我得到 club_offer_id 所以我可以连接到 club_offer < / strong>表。然后在 club_offer 表中,我得到 club_id ,这样我就可以连接到 club 表了。然后在分会表中,我获得 users_id ,以便我可以连接到用户表。然后在用户表中,我得到 company_id ,以便我可以连接到公司表。在公司表格中,我获得了 special_id ,因此我可以连接到最后一个表 company_reports 。这是我需要从中获取数据的地方。我需要这个:
这里我有3个感兴趣的领域: report_year , variable_code 和 variable_value 。
report_year 存储公司报告的年份 variable_code 存储已制作的报告类型。在我关于SQL Fiddle的简化示例中,可能的值是 AOP 605 和 AOP 201 。 variable_value 存储每个variable_code的值。例如, AOP 605 代码的值为 5 。
我遇到了麻烦:我需要为属于某个cpv_id组(来自用户请求)的所有公司的每个variable_code求和variable_value。我只设法创建将一个代码的值加起来的查询。您可以在SQL Fiddle中看到:http://sqlfiddle.com/#!2/a3e296/2
在输出中,您将看到我正在为代码 AOP 201 执行totalSum,而在我的应用程序中,我正在执行另外一个查询以计算 AOP 605 的总和,但我认为这并不理想,并且可能有一些方法可以在同一查询中获得 AOP 201 和 AOP 605 的SUM。我可以调用它们然后sum201和sum605并在我的应用程序中显示它们。有人可以告诉我这是否可能?你能告诉我收集 AOP 201 和 AOP 605 的总和的查询,并将它们存储在不同的值中,这样我就能显示 AOP 201的总和和 AOP 605 ???
还有一个棘手的部分。正如您在我的查询中所看到的,我遇到了这种情况:AND company_report.report_year = 2013
。这并不理想,因为有些公司将不会在2013年制作报告,其中一些公司仅在2012年报告。我将不得不采取他们所拥有的报告的最后一年。因此,例如,如果一些公司在2012年和2013年有报告,我将只计算2013年的数量。同样,如果其他公司有2009年和2012年的报告,我将只计算2012年的数量。
你能帮我解决这个问题吗?
我现在正在为此奋斗3天,并且无法找到解决方案。谢谢你的时间。
编辑:我需要 AOP 605 和 AOP 201 的总和作为单独的列,所以我可以在我的应用程序代码中访问它们,如$ sumOne - 显示<的总和strong> AOP 605 和$ sumTwo - 显示 AOP 201 的总和。更多信息:我正在尝试将这两个查询合并为一个:
SELECT DISTINCT company_report.*, floor(sum(variable_value)) as totalSum
FROM company_report
JOIN company ON company_report.special_id = company.special_id
JOIN users ON company.id = users.company_id
JOIN club ON users.id = club.users_id
JOIN club_offer ON club.id = club_offer.club_id
JOIN club_offer_cpv ON club_offer.id = club_offer_id
AND club_offer_cpv.cpv_id LIKE '66%'
AND company_report.variable_code = 'AOP 201'
AND company_report.report_year = 2013
和
SELECT DISTINCT company_report.*, floor(sum(variable_value)) as totalSum
FROM company_report
JOIN company ON company_report.special_id = company.special_id
JOIN users ON company.id = users.company_id
JOIN club ON users.id = club.users_id
JOIN club_offer ON club.id = club_offer.club_id
JOIN club_offer_cpv ON club_offer.id = club_offer_id
AND club_offer_cpv.cpv_id LIKE '66%'
AND company_report.variable_code = 'AOP 605'
AND company_report.report_year = 2013
请注意每个查询中的这些行:
company_report.variable_code = 'AOP 605'
company_report.variable_code = 'AOP 201'
因此,在一个查询中,我希望获得具有variable_code =&#34; AOP 605&#34;的行的variable_value的总和,并且在第二个中,我需要获得具有variable_code =&#34; AOP 201&的行的variable_value的总和#34 ;.但我认为必须有一些方法可以在一个查询中获得两个总和,但是我可以单独显示它们的方式,例如:
AOP 605的总和是:123
AOP 201的总和是:345
答案 0 :(得分:1)
你似乎在寻找SELECT的GROUP BY部分,如下所示:
SELECT DISTINCT company_report.*, floor(sum(variable_value)) as totalSum
FROM company_report
JOIN company ON company_report.special_id = company.special_id
JOIN users ON company.id = users.company_id
JOIN club ON users.id = club.users_id
JOIN club_offer ON club.id = club_offer.club_id
JOIN club_offer_cpv ON club_offer.id = club_offer_id
AND club_offer_cpv.cpv_id LIKE '66%'
AND company_report.variable_code IN ('AOP 201','AOP 605')
AND company_report.report_year = 2013
GROUP BY company_report.variable_code
是吗?