1

请原谅我对 SQL 的有限理解,但我希望有人能帮助我。我需要更改其他人前段时间编写的查询。

该查询显示多个领域中各种行业的每个行业的消费量。它吐出的表格目前看起来像这样:

+---------------+----------+---------+
| Economic area | Industry |   Total |
+---------------+----------+---------+
| Area1         |          |         |
|               | Ind1     |  459740 |
|               | Ind2     |   43000 |
|               | Ind3     |       0 |
|               | Total    |  502740 |
| Area2         |          |         |
|               | Ind1     |  725560 |
|               | Ind2     |  111017 |
|               | Ind3     |  277577 |
|               | Total    | 1114154 |
+---------------+----------+---------+

不幸的是,这张表与我们发布的关于每个行业和地区的生产商数量的另一张表一起可以在生产商很少的情况下揭示商业敏感信息。例如,在下表中,区域 1 的工业 2 只有一个生产者,因此区域 1 中工业 2 消耗的上表中的所有东西都流向了该生产者。

+---------------+---------+------+------+------+
| Economic area | County  | Ind1 | Ind2 | Ind3 |
+---------------+---------+------+------+------+
| Area1         |         |      |      |      |
|               | county1 |    1 |    0 |    0 |
|               | county2 |    3 |    1 |    2 |
|               | county3 |    1 |    0 |    0 |
|               | Total:  |    5 |    1 |    2 |
|               |         |      |      |      |
| Area2         | county4 |    5 |    0 |    1 |
|               | county5 |    3 |    3 |    1 |
|               | county6 |    1 |    0 |    1 |
|               | county7 |    0 |    0 |    0 |
|               | Total:  |    9 |    3 |    3 |
+---------------+---------+------+------+------+

我被要求做的是生成第一个表格的精简版本,如下图所示,其中一个区域内少于 3 个生产商的行业被聚合到一个通用的其他行业中。像这样的东西:

+---------------+----------+--------+
| Economic area | Industry |  All   |
+---------------+----------+--------+
| Area1         |          |        |
|               | Ind1     | 459740 |
|               | OtherInd | 121376 |
|               | Total    | 581116 |
| Area2         |          |        |
|               | Ind1     | 725560 |
|               | Ind2     | 111017 |
|               | Ind3     |    244 |
|               | Total    | 836821 |
+---------------+----------+--------+

我一直在寻找一段时间,但一直找不到任何有效的东西,或者我可以很好地理解以使其发挥作用。我尝试使用Count(Case(industry_code<3,1,0))... 但我在 MS Access 中工作,所以这不起作用。我考虑过使用 and IIForSwitch语句,但似乎其中任何一个都不允许进行正确类型的比较。我还发现有人建议了一个具有两个不同分组的 From 语句 - 但当我尝试访问时,Access 吐出一个错误。

我获得的唯一微不足道的成功是 a HAVING (((Count(Allmills.industry_code))>3)),但它只是完全放弃了问题行业。

目前,查询的简化版本如下所示:

SELECT 
    economic_areas.economic_area AS [Economic area],
    Industry_codes.industry_heading AS Industry, 
    Sum(Allmills.consumption) AS [All], 
    Sum(Allmills.[WA origin logs]) AS Washington 
    Allmills.industry_code, 
    Count(Allmills.industry_code) AS CountOfindustry_code, 
    Sum(Allmills.industry_code) AS SumOfindustry_code
FROM ((economic_areas INNER JOIN Allmills ON (economic_areas.state_abbrev =   
      Allmills.state_abbrev) 
      AND (economic_areas.economic_area_code = Allmills.economic_area_code)) 
      INNER JOIN Industry_codes ON Allmills.display_industry_code =  
       Industry_codes.industry_code)
WHERE (((Allmills.economic_area_code) Is Not Null))
GROUP BY Allmills.display_industry_economic_area_code, 
         Allmills.display_industry_code, economic_areas.economic_area,
         Industry_codes.industry_heading, Allmills.industry_code
ORDER BY Allmills.display_industry_economic_area_code, 
            Allmills.display_industry_code;

任何帮助都将不胜感激,即使只是关于哪些类型的技术可能有用的建议,我可以在其他地方查看 - 我现在只是在绕圈子。

4

1 回答 1

0

HAVING在这里确实是解决方案 - 将您的查询更改为使用HAVING> 3,添加另一个使用HAVING<= 3 的查询,然后UNION ALL是它们的结果

于 2013-10-10T20:18:26.357 回答