1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
-- ============================================================
-- 2025 / 2026 年 1-8 月累计 货运量、货物周转量 汇总(同名企业口径)
-- 生成日期:2026-09-19   数据库:traffic_audit(MySQL 8.0.29)
-- ------------------------------------------------------------
-- 数据来源表:h2032_enterprise_monthly
--   《道路货物运输月度生产情况表》= 交企统H203-2表,企业级月报(规上企业)
--   字段:freight_total   货运量_总计(吨)
--         turnover_total  货物周转量_总计(吨公里)
--         report_period   报表期,格式 'YYYY-MM'
--         enterprise_name 企业名称
-- 单位换算:表内存的是「吨 / 吨公里」,报表口径是「万吨 / 万吨公里」,
--          所以下面统一 ÷10000。
-- 期间取法:1-8 月 = report_period BETWEEN '2025-01' AND '2025-08'
--          (report_period 是字符串 'YYYY-MM',直接比大小即可)
-- 为什么要「同名企业口径」:
--   2025 年 1-8 月有 664 家企业、2026 年 1-8 月只有 636 家,
--   直接拿两年总数相减,差额里混着「企业数量变了」的影响,不是真实增减。
--   把两年都报送过的企业名称取交集(实测 545 家),两年的企业范围才一致。
-- 实测结果(同名企业口径 545 家):
--   2025 年 1-8 月:货运量 30153.14 万吨,周转量 4635340.46 万吨公里
--   2026 年 1-8 月:货运量 27752.68 万吨,周转量 4389882.05 万吨公里
--   同比:货运量 -7.96%,周转量 -5.30%
-- ============================================================
 
 
-- =====================================================================
-- 查询 1:汇总一行 —— 同名企业口径的两年累计数 + 同比增速
-- =====================================================================
SELECT COUNT(DISTINCT e.enterprise_name)                                   AS 企业数,
       ROUND(SUM(CASE WHEN e.report_period <= '2025-08'
                      THEN e.freight_total  ELSE 0 END) / 10000, 2)        AS 货运量2025_万吨,
       ROUND(SUM(CASE WHEN e.report_period >= '2026-01'
                      THEN e.freight_total  ELSE 0 END) / 10000, 2)        AS 货运量2026_万吨,
       ROUND((SUM(CASE WHEN e.report_period >= '2026-01' THEN e.freight_total ELSE 0 END)
            / NULLIF(SUM(CASE WHEN e.report_period <= '2025-08' THEN e.freight_total ELSE 0 END), 0) - 1) * 100, 2)
                                                                           AS 货运量同比_百分比,
       ROUND(SUM(CASE WHEN e.report_period <= '2025-08'
                      THEN e.turnover_total ELSE 0 END) / 10000, 2)        AS 周转量2025_万吨公里,
       ROUND(SUM(CASE WHEN e.report_period >= '2026-01'
                      THEN e.turnover_total ELSE 0 END) / 10000, 2)        AS 周转量2026_万吨公里,
       ROUND((SUM(CASE WHEN e.report_period >= '2026-01' THEN e.turnover_total ELSE 0 END)
            / NULLIF(SUM(CASE WHEN e.report_period <= '2025-08' THEN e.turnover_total ELSE 0 END), 0) - 1) * 100, 2)
                                                                           AS 周转量同比_百分比
FROM h2032_enterprise_monthly e
-- 下面两个 JOIN:只要两年 1-8 月都报送过的企业(同名企业口径的核心)
JOIN (SELECT DISTINCT enterprise_name FROM h2032_enterprise_monthly
       WHERE report_period BETWEEN '2025-01' AND '2025-08') a
  ON a.enterprise_name = e.enterprise_name
JOIN (SELECT DISTINCT enterprise_name FROM h2032_enterprise_monthly
       WHERE report_period BETWEEN '2026-01' AND '2026-08') b
  ON b.enterprise_name = e.enterprise_name
WHERE e.report_period BETWEEN '2025-01' AND '2026-08';
 
 
-- =====================================================================
-- 查询 2:逐企业对照明细(同名企业,两年并排),可直接导出 Excel
--   按 2026 年货运量从大到小排;去掉 ORDER BY 就是完整 545 行。
-- =====================================================================
SELECT e.enterprise_name                                                   AS 企业名称,
       MAX(CASE WHEN e.report_period >= '2026-01' THEN e.region_code END)  AS 地区代码,
       ROUND(SUM(CASE WHEN e.report_period <= '2025-08' THEN e.freight_total  ELSE 0 END) / 10000, 2) AS 货运量2025_万吨,
       ROUND(SUM(CASE WHEN e.report_period >= '2026-01' THEN e.freight_total  ELSE 0 END) / 10000, 2) AS 货运量2026_万吨,
       ROUND((SUM(CASE WHEN e.report_period >= '2026-01' THEN e.freight_total ELSE 0 END)
            - SUM(CASE WHEN e.report_period <= '2025-08' THEN e.freight_total ELSE 0 END)) / 10000, 2) AS 货运量增减_万吨,
       ROUND((SUM(CASE WHEN e.report_period >= '2026-01' THEN e.freight_total ELSE 0 END)
            / NULLIF(SUM(CASE WHEN e.report_period <= '2025-08' THEN e.freight_total ELSE 0 END), 0) - 1) * 100, 2) AS 货运量同比_百分比,
       ROUND(SUM(CASE WHEN e.report_period <= '2025-08' THEN e.turnover_total ELSE 0 END) / 10000, 2) AS 周转量2025_万吨公里,
       ROUND(SUM(CASE WHEN e.report_period >= '2026-01' THEN e.turnover_total ELSE 0 END) / 10000, 2) AS 周转量2026_万吨公里,
       ROUND((SUM(CASE WHEN e.report_period >= '2026-01' THEN e.turnover_total ELSE 0 END)
            - SUM(CASE WHEN e.report_period <= '2025-08' THEN e.turnover_total ELSE 0 END)) / 10000, 2) AS 周转量增减_万吨公里,
       ROUND((SUM(CASE WHEN e.report_period >= '2026-01' THEN e.turnover_total ELSE 0 END)
            / NULLIF(SUM(CASE WHEN e.report_period <= '2025-08' THEN e.turnover_total ELSE 0 END), 0) - 1) * 100, 2) AS 周转量同比_百分比
FROM h2032_enterprise_monthly e
JOIN (SELECT DISTINCT enterprise_name FROM h2032_enterprise_monthly
       WHERE report_period BETWEEN '2025-01' AND '2025-08') a
  ON a.enterprise_name = e.enterprise_name
JOIN (SELECT DISTINCT enterprise_name FROM h2032_enterprise_monthly
       WHERE report_period BETWEEN '2026-01' AND '2026-08') b
  ON b.enterprise_name = e.enterprise_name
WHERE e.report_period BETWEEN '2025-01' AND '2026-08'
GROUP BY e.enterprise_name
ORDER BY 货运量2026_万吨 DESC;
 
 
-- =====================================================================
-- 查询 3:三种口径对照 —— 看清楚「全量」和「同名」差在哪
--   ALL_2025 / ALL_2026   : 各自年份的全部企业
--   SAME_2025 / SAME_2026 : 同名企业口径(545 家)
-- =====================================================================
SELECT t.scope_type                            AS 口径,
       COUNT(DISTINCT t.enterprise_name)       AS 企业数,
       ROUND(SUM(t.freight_total)  / 10000, 2) AS 货运量_万吨,
       ROUND(SUM(t.turnover_total) / 10000, 2) AS 周转量_万吨公里
FROM (
  SELECT 'ALL_2025' AS scope_type, enterprise_name, freight_total, turnover_total
    FROM h2032_enterprise_monthly WHERE report_period BETWEEN '2025-01' AND '2025-08'
  UNION ALL
  SELECT 'ALL_2026', enterprise_name, freight_total, turnover_total
    FROM h2032_enterprise_monthly WHERE report_period BETWEEN '2026-01' AND '2026-08'
  UNION ALL
  SELECT 'SAME_2025', e.enterprise_name, e.freight_total, e.turnover_total
    FROM h2032_enterprise_monthly e
    JOIN (SELECT DISTINCT enterprise_name FROM h2032_enterprise_monthly
           WHERE report_period BETWEEN '2025-01' AND '2025-08') a ON a.enterprise_name = e.enterprise_name
    JOIN (SELECT DISTINCT enterprise_name FROM h2032_enterprise_monthly
           WHERE report_period BETWEEN '2026-01' AND '2026-08') b ON b.enterprise_name = e.enterprise_name
   WHERE e.report_period BETWEEN '2025-01' AND '2025-08'
  UNION ALL
  SELECT 'SAME_2026', e.enterprise_name, e.freight_total, e.turnover_total
    FROM h2032_enterprise_monthly e
    JOIN (SELECT DISTINCT enterprise_name FROM h2032_enterprise_monthly
           WHERE report_period BETWEEN '2025-01' AND '2025-08') a ON a.enterprise_name = e.enterprise_name
    JOIN (SELECT DISTINCT enterprise_name FROM h2032_enterprise_monthly
           WHERE report_period BETWEEN '2026-01' AND '2026-08') b ON b.enterprise_name = e.enterprise_name
   WHERE e.report_period BETWEEN '2026-01' AND '2026-08'
) t
GROUP BY t.scope_type
ORDER BY t.scope_type;
 
 
-- =====================================================================
-- 查询 4:差异企业名单(核对用)—— 只在一年报送的企业及其累计量
--   only_in = 2025 / 2026
--   实测:2025 年独有 119 家、2026 年独有 91 家(1-8 月口径)
-- =====================================================================
SELECT '2025' AS only_in, e.enterprise_name AS 企业名称,
       ROUND(SUM(e.freight_total) / 10000, 2) AS 货运量_万吨,
       ROUND(SUM(e.turnover_total) / 10000, 2) AS 周转量_万吨公里
FROM h2032_enterprise_monthly e
LEFT JOIN (SELECT DISTINCT enterprise_name FROM h2032_enterprise_monthly
            WHERE report_period BETWEEN '2026-01' AND '2026-08') b
       ON b.enterprise_name = e.enterprise_name
WHERE e.report_period BETWEEN '2025-01' AND '2025-08' AND b.enterprise_name IS NULL
GROUP BY e.enterprise_name
UNION ALL
SELECT '2026', e.enterprise_name,
       ROUND(SUM(e.freight_total) / 10000, 2),
       ROUND(SUM(e.turnover_total) / 10000, 2)
FROM h2032_enterprise_monthly e
LEFT JOIN (SELECT DISTINCT enterprise_name FROM h2032_enterprise_monthly
            WHERE report_period BETWEEN '2025-01' AND '2025-08') a
       ON a.enterprise_name = e.enterprise_name
WHERE e.report_period BETWEEN '2026-01' AND '2026-08' AND a.enterprise_name IS NULL
GROUP BY e.enterprise_name
ORDER BY only_in, 货运量_万吨 DESC;
 
 
-- =====================================================================
-- 查询 5:分市州「同名企业口径」两年累计对照
--   地区代码取 2026 年那条记录的 region_code
-- =====================================================================
SELECT CASE
         WHEN region_code LIKE '4201%' THEN '武汉' WHEN region_code LIKE '4202%' THEN '黄石'
         WHEN region_code LIKE '4203%' THEN '十堰' WHEN region_code LIKE '4205%' THEN '宜昌'
         WHEN region_code LIKE '4206%' THEN '襄阳' WHEN region_code LIKE '4207%' THEN '鄂州'
         WHEN region_code LIKE '4208%' THEN '荆门' WHEN region_code LIKE '4209%' THEN '孝感'
         WHEN region_code LIKE '4210%' THEN '荆州' WHEN region_code LIKE '4211%' THEN '黄冈'
         WHEN region_code LIKE '4212%' THEN '咸宁' WHEN region_code LIKE '4213%' THEN '随州'
         WHEN region_code LIKE '4228%' THEN '恩施' WHEN region_code LIKE '429004%' THEN '仙桃'
         WHEN region_code LIKE '429005%' THEN '潜江' WHEN region_code LIKE '429006%' THEN '天门'
         WHEN region_code LIKE '429021%' THEN '林区' ELSE '其他' END           AS 市州,
       COUNT(DISTINCT d.enterprise_name)                                       AS 同名企业数,
       ROUND(SUM(d.freight_2025) / 10000, 2)                                   AS 货运量2025_万吨,
       ROUND(SUM(d.freight_2026) / 10000, 2)                                   AS 货运量2026_万吨,
       ROUND(SUM(d.turnover_2025) / 10000, 2)                                  AS 周转量2025_万吨公里,
       ROUND(SUM(d.turnover_2026) / 10000, 2)                                  AS 周转量2026_万吨公里
FROM (
  SELECT e.enterprise_name,
         MAX(CASE WHEN e.report_period >= '2026-01' THEN e.region_code END)    AS region_code,
         SUM(CASE WHEN e.report_period <= '2025-08' THEN e.freight_total  ELSE 0 END) AS freight_2025,
         SUM(CASE WHEN e.report_period >= '2026-01' THEN e.freight_total  ELSE 0 END) AS freight_2026,
         SUM(CASE WHEN e.report_period <= '2025-08' THEN e.turnover_total ELSE 0 END) AS turnover_2025,
         SUM(CASE WHEN e.report_period >= '2026-01' THEN e.turnover_total ELSE 0 END) AS turnover_2026
  FROM h2032_enterprise_monthly e
  JOIN (SELECT DISTINCT enterprise_name FROM h2032_enterprise_monthly
         WHERE report_period BETWEEN '2025-01' AND '2025-08') a ON a.enterprise_name = e.enterprise_name
  JOIN (SELECT DISTINCT enterprise_name FROM h2032_enterprise_monthly
         WHERE report_period BETWEEN '2026-01' AND '2026-08') b ON b.enterprise_name = e.enterprise_name
  WHERE e.report_period BETWEEN '2025-01' AND '2026-08'
  GROUP BY e.enterprise_name
) d
GROUP BY 市州
ORDER BY 货运量2026_万吨 DESC;
 
 
-- =====================================================================
-- 查询 6:数据体检 —— 同名企业里月份不足 8 个月的(累计数会偏小,比对时注意)
--   正常:2025 年 1-8 月 8 条 + 2026 年 1-8 月 8 条
--   实测:无异常企业,全部 545 家两年各 8 个月齐全
-- =====================================================================
SELECT e.enterprise_name AS 企业名称,
       SUM(CASE WHEN e.report_period BETWEEN '2025-01' AND '2025-08' THEN 1 ELSE 0 END) AS 记录数2025,
       SUM(CASE WHEN e.report_period BETWEEN '2026-01' AND '2026-08' THEN 1 ELSE 0 END) AS 记录数2026
FROM h2032_enterprise_monthly e
JOIN (SELECT DISTINCT enterprise_name FROM h2032_enterprise_monthly
       WHERE report_period BETWEEN '2025-01' AND '2025-08') a ON a.enterprise_name = e.enterprise_name
JOIN (SELECT DISTINCT enterprise_name FROM h2032_enterprise_monthly
       WHERE report_period BETWEEN '2026-01' AND '2026-08') b ON b.enterprise_name = e.enterprise_name
WHERE e.report_period BETWEEN '2025-01' AND '2026-08'
GROUP BY e.enterprise_name
HAVING 记录数2025 <> 8 OR 记录数2026 <> 8;
-- =====================================================================
-- 查询 7:企业明细导出(推荐用这版,546 家)
--   与查询 2 的区别:匹配键用「统一社会信用代码」而不是企业名称,
--   多覆盖 1 家改名企业(91420112558443820B:
--   2025-01~2025-09 叫「湖北三峡富烨绿电供应链有限公司」,
--   2025-10 起叫「湖北长峡富烨绿电供应链有限公司」),
--   查询 2 按名称匹配会把这家两年都漏掉,且同时计入两年「独有企业」名单。
--   输出列已按导出习惯排好,可直接粘进 Excel;按 2026 年货运量降序。
--   提示:明细行是「先四舍五入再求和」,与查询 8 的合计有 0.01~0.02 的尾差,属正常。
-- =====================================================================
SELECT d.credit_code                                                     AS 统一社会信用代码,
       d.name_2026                                                       AS 企业名称,
       d.name_2025                                                       AS 名称2025,
       IF(d.name_2025 <> d.name_2026, '是', '')                          AS 是否改名,
       CASE
         WHEN d.region_code LIKE '4201%' THEN '武汉' WHEN d.region_code LIKE '4202%' THEN '黄石'
         WHEN d.region_code LIKE '4203%' THEN '十堰' WHEN d.region_code LIKE '4205%' THEN '宜昌'
         WHEN d.region_code LIKE '4206%' THEN '襄阳' WHEN d.region_code LIKE '4207%' THEN '鄂州'
         WHEN d.region_code LIKE '4208%' THEN '荆门' WHEN d.region_code LIKE '4209%' THEN '孝感'
         WHEN d.region_code LIKE '4210%' THEN '荆州' WHEN d.region_code LIKE '4211%' THEN '黄冈'
         WHEN d.region_code LIKE '4212%' THEN '咸宁' WHEN d.region_code LIKE '4213%' THEN '随州'
         WHEN d.region_code LIKE '4228%' THEN '恩施' WHEN d.region_code LIKE '429004%' THEN '仙桃'
         WHEN d.region_code LIKE '429005%' THEN '潜江' WHEN d.region_code LIKE '429006%' THEN '天门'
         WHEN d.region_code LIKE '429021%' THEN '林区' ELSE '其他' END     AS 市州,
       d.region_code                                                     AS 地区代码,
       ROUND(d.freight_2025  / 10000, 2)                                 AS 货运量2025_万吨,
       ROUND(d.freight_2026  / 10000, 2)                                 AS 货运量2026_万吨,
       ROUND((d.freight_2026 - d.freight_2025) / 10000, 2)               AS 货运量增减_万吨,
       ROUND((d.freight_2026 / NULLIF(d.freight_2025, 0) - 1) * 100, 2)  AS 货运量同比_百分比,
       ROUND(d.turnover_2025 / 10000, 2)                                 AS 周转量2025_万吨公里,
       ROUND(d.turnover_2026 / 10000, 2)                                 AS 周转量2026_万吨公里,
       ROUND((d.turnover_2026 - d.turnover_2025) / 10000, 2)             AS 周转量增减_万吨公里,
       ROUND((d.turnover_2026 / NULLIF(d.turnover_2025, 0) - 1) * 100, 2) AS 周转量同比_百分比
FROM (
  SELECT e.unified_credit_code AS credit_code,
         -- 2026 年用的名字(改名后取新名)、2025 年用的名字,用于标记改名
         MAX(CASE WHEN e.report_period >= '2026-01' THEN e.enterprise_name END) AS name_2026,
         MAX(CASE WHEN e.report_period <= '2025-08' THEN e.enterprise_name END) AS name_2025,
         MAX(CASE WHEN e.report_period >= '2026-01' THEN e.region_code END)     AS region_code,
         SUM(CASE WHEN e.report_period <= '2025-08' THEN e.freight_total  ELSE 0 END) AS freight_2025,
         SUM(CASE WHEN e.report_period >= '2026-01' THEN e.freight_total  ELSE 0 END) AS freight_2026,
         SUM(CASE WHEN e.report_period <= '2025-08' THEN e.turnover_total ELSE 0 END) AS turnover_2025,
         SUM(CASE WHEN e.report_period >= '2026-01' THEN e.turnover_total ELSE 0 END) AS turnover_2026
  FROM h2032_enterprise_monthly e
  JOIN (SELECT DISTINCT unified_credit_code c FROM h2032_enterprise_monthly
         WHERE report_period BETWEEN '2025-01' AND '2025-08') a ON a.c = e.unified_credit_code
  JOIN (SELECT DISTINCT unified_credit_code c FROM h2032_enterprise_monthly
         WHERE report_period BETWEEN '2026-01' AND '2026-08') b ON b.c = e.unified_credit_code
  WHERE e.report_period BETWEEN '2025-01' AND '2026-08'
  GROUP BY e.unified_credit_code
) d
ORDER BY 货运量2026_万吨 DESC;
 
 
-- =====================================================================
-- 查询 8:查询 7 的合计行(导出明细后用来对总数,546 家口径)
--   2025 年 1-8 月:货运量 30162.99 万吨、周转量 4637038.58 万吨公里
--   2026 年 1-8 月:货运量 27764.88 万吨、周转量 4392984.81 万吨公里
-- =====================================================================
SELECT COUNT(DISTINCT e.unified_credit_code)                              AS 企业数,
       ROUND(SUM(CASE WHEN e.report_period <= '2025-08' THEN e.freight_total  ELSE 0 END) / 10000, 2) AS 货运量2025_万吨,
       ROUND(SUM(CASE WHEN e.report_period >= '2026-01' THEN e.freight_total  ELSE 0 END) / 10000, 2) AS 货运量2026_万吨,
       ROUND(SUM(CASE WHEN e.report_period <= '2025-08' THEN e.turnover_total ELSE 0 END) / 10000, 2) AS 周转量2025_万吨公里,
       ROUND(SUM(CASE WHEN e.report_period >= '2026-01' THEN e.turnover_total ELSE 0 END) / 10000, 2) AS 周转量2026_万吨公里
FROM h2032_enterprise_monthly e
JOIN (SELECT DISTINCT unified_credit_code c FROM h2032_enterprise_monthly
       WHERE report_period BETWEEN '2025-01' AND '2025-08') a ON a.c = e.unified_credit_code
JOIN (SELECT DISTINCT unified_credit_code c FROM h2032_enterprise_monthly
       WHERE report_period BETWEEN '2026-01' AND '2026-08') b ON b.c = e.unified_credit_code
WHERE e.report_period BETWEEN '2025-01' AND '2026-08';
 
 
-- =====================================================================
-- 三、怎么把查询 7 的结果导出来
-- ---------------------------------------------------------------------
-- 方式一:命令行导出(输出制表符分隔的 .tsv,Excel 双击即可分列,最省事)
--   mysql --host=127.0.0.1 --port=3308 --user=root --password=123456 ^
--         --database=traffic_audit --default-character-set=utf8mb4 --batch --raw ^
--         --execute="这里整段粘贴查询 7 的 SQL(含最外层分号之前的全部内容)" ^
--         > D:\临时\企业明细_546家_2025-2026年1-8月.tsv
--   注意 1:一定要带 --default-character-set=utf8mb4,否则中文列名/企业名会变乱码。
--   注意 2:导出的 .tsv 是「UTF-8 无 BOM」,部分人的 Excel 直接双击会显示乱码,
--          请改用 Excel 的「数据 → 从文本/CSV」导入并选 UTF-8 编码,
--          或直接用下面的方式二导出成 xlsx(最不容易出问题)。
 
--
-- 方式二:查询工具导出(推荐给不熟命令行的场景)
--   在 Navicat / MySQL Workbench / DBeaver 里直接执行查询 7,
--   右键结果网格 →「导出结果」→ 选 xlsx 或 csv 即可。
--
-- 方式三:MySQL 服务端直接写文件(一般不用)
--   需要服务端 secure_file_priv 允许目标目录,且路径是「服务器上」的路径:
--   SELECT ... INTO OUTFILE 'D:/tmp/freight_detail.csv'
--     FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';
--   先查 secure_file_priv:SHOW VARIABLES LIKE 'secure_file_priv';