Blame view

项目文档相关/sql/合同成本表添加分类字段.sql 2.44 KB
d8035736   “wangming”   Refactor project ...
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
  -- ============================================
  -- 为合同成本按月统计表(lq_contract_monthly_cost)添加分类字段
  -- ============================================
  -- 说明:此脚本为合同成本表添加分类字段,用于按分类统计合同成本
  -- 
  -- 字段说明:
  -- F_Category:分类(冗余字段,便于按分类统计)
  -- 
  -- 业务含义:
  -- - 分类字段用于区分不同类型的合同(如:租门店、员工宿舍、车辆、场所等)
  -- - 便于后续按分类统计合同成本
  -- 
  -- 注意事项:
  -- - 字段类型为VARCHAR(100),允许为NULL(历史数据可能没有分类)
  -- - 字段位置:放在 F_StoreName 字段之后
  -- - 创建后需要更新历史数据,从合同表中获取对应的分类
  
  -- ============================================
  -- 1. 添加分类字段
  -- ============================================
  ALTER TABLE `lq_contract_monthly_cost` 
  ADD COLUMN `F_Category` VARCHAR(100) NULL COMMENT '分类(冗余字段,便于按分类统计)' AFTER `F_StoreName`;
  
  -- ============================================
  -- 2. 添加分类索引
  -- ============================================
  ALTER TABLE `lq_contract_monthly_cost` 
  ADD INDEX `idx_category` (`F_Category`) COMMENT '分类索引';
  
  -- ============================================
  -- 3. 添加分类+月份联合索引
  -- ============================================
  ALTER TABLE `lq_contract_monthly_cost` 
  ADD INDEX `idx_category_month` (`F_Category`, `F_Month`) COMMENT '分类+月份联合索引';
  
  -- ============================================
  -- 4. 更新历史数据:从合同表中获取分类
  -- ============================================
  UPDATE `lq_contract_monthly_cost` cost
  INNER JOIN `lq_contract` contract ON cost.F_ContractId = contract.F_Id
  SET cost.F_Category = contract.F_Category
  WHERE cost.F_Category IS NULL 
    AND contract.F_Category IS NOT NULL;
  
  -- ============================================
  -- 5. 验证更新结果
  -- ============================================
  -- 查看更新后的统计信息
  SELECT 
      COUNT(*) as TotalCount,
      COUNT(F_Category) as HasCategoryCount,
      COUNT(*) - COUNT(F_Category) as NullCategoryCount
  FROM lq_contract_monthly_cost
  WHERE F_IsEffective = 1;
  
  -- 查看各分类的统计信息
  SELECT 
      F_Category,
      COUNT(*) as RecordCount,
      SUM(F_MonthlyCost) as TotalCost
  FROM lq_contract_monthly_cost
  WHERE F_IsEffective = 1
  GROUP BY F_Category
  ORDER BY TotalCost DESC;