更新历史数据业绩类型字段.sql 8.04 KB
-- 更新历史数据的业绩类型字段
-- 业绩类型根据品项表(lq_xmzl)的 fl3 字段来设置
-- fl3 字段是"分类③-工资用",用于区分不同的业绩类型

-- 1. 更新开单品项表(通过品项ID关联品项表的fl3字段)
UPDATE lq_kd_pxmx pxmx
INNER JOIN lq_xmzl xmzl ON pxmx.px = xmzl.F_Id
SET pxmx.F_PerformanceType = COALESCE(xmzl.fl3, '')
WHERE (pxmx.F_PerformanceType IS NULL OR pxmx.F_PerformanceType = '')
  AND pxmx.F_IsEffective = 1;

-- 2. 更新开单健康师业绩表(通过品项ID或开单品项明细ID关联品项表的fl3字段)
UPDATE lq_kd_jksyj jksyj
LEFT JOIN lq_kd_pxmx pxmx ON jksyj.F_kdpxid = pxmx.F_Id
LEFT JOIN lq_xmzl xmzl ON COALESCE(jksyj.F_ItemId, pxmx.px) = xmzl.F_Id
SET jksyj.F_PerformanceType = COALESCE(xmzl.fl3, '')
WHERE (jksyj.F_PerformanceType IS NULL OR jksyj.F_PerformanceType = '')
  AND jksyj.F_IsEffective = 1
  AND xmzl.F_Id IS NOT NULL;

-- 3. 更新开单科技部老师业绩表(通过品项ID或开单品项明细ID关联品项表的fl3字段)
UPDATE lq_kd_kjbsyj kjbsyj
LEFT JOIN lq_kd_pxmx pxmx ON kjbsyj.F_kdpxid = pxmx.F_Id
LEFT JOIN lq_xmzl xmzl ON COALESCE(kjbsyj.F_ItemId, pxmx.px) = xmzl.F_Id
SET kjbsyj.F_PerformanceType = COALESCE(xmzl.fl3, '')
WHERE (kjbsyj.F_PerformanceType IS NULL OR kjbsyj.F_PerformanceType = '')
  AND kjbsyj.F_IsEffective = 1
  AND xmzl.F_Id IS NOT NULL;

-- 4. 更新消耗品项表(通过品项ID关联品项表的fl3字段)
UPDATE lq_xh_pxmx pxmx
INNER JOIN lq_xmzl xmzl ON pxmx.px = xmzl.F_Id
SET pxmx.F_PerformanceType = COALESCE(xmzl.fl3, '')
WHERE (pxmx.F_PerformanceType IS NULL OR pxmx.F_PerformanceType = '')
  AND (pxmx.F_IsEffective = 1 OR pxmx.F_IsEffective IS NULL);

-- 5. 更新消耗健康师业绩表(通过品项ID关联品项表的fl3字段)
UPDATE lq_xh_jksyj jksyj
LEFT JOIN lq_xh_pxmx pxmx ON jksyj.F_kdpxid = pxmx.F_Id
LEFT JOIN lq_xmzl xmzl ON COALESCE(jksyj.F_ItemId, pxmx.px) = xmzl.F_Id
SET jksyj.F_PerformanceType = COALESCE(xmzl.fl3, '')
WHERE (jksyj.F_PerformanceType IS NULL OR jksyj.F_PerformanceType = '')
  AND (jksyj.F_IsEffective = 1 OR jksyj.F_IsEffective IS NULL)
  AND xmzl.F_Id IS NOT NULL;

-- 6. 更新消耗科技部老师业绩表(通过品项ID关联品项表的fl3字段)
UPDATE lq_xh_kjbsyj kjbsyj
LEFT JOIN lq_xh_pxmx pxmx ON kjbsyj.F_hkpxid = pxmx.F_Id
LEFT JOIN lq_xmzl xmzl ON COALESCE(kjbsyj.F_ItemId, pxmx.px) = xmzl.F_Id
SET kjbsyj.F_PerformanceType = COALESCE(xmzl.fl3, '')
WHERE (kjbsyj.F_PerformanceType IS NULL OR kjbsyj.F_PerformanceType = '')
  AND (kjbsyj.F_IsEffective = 1 OR kjbsyj.F_IsEffective IS NULL)
  AND xmzl.F_Id IS NOT NULL;

-- 7. 更新退卡明细表(通过品项ID关联品项表的fl3字段)
UPDATE lq_hytk_mx mx
INNER JOIN lq_xmzl xmzl ON mx.px = xmzl.F_Id
SET mx.F_PerformanceType = COALESCE(xmzl.fl3, '')
WHERE (mx.F_PerformanceType IS NULL OR mx.F_PerformanceType = '')
  AND mx.F_IsEffective = 1;

-- 8. 更新退卡健康师业绩表(通过品项ID关联品项表的fl3字段)
UPDATE lq_hytk_jksyj jksyj
LEFT JOIN lq_hytk_mx mx ON jksyj.F_CardReturn = mx.F_Id
LEFT JOIN lq_xmzl xmzl ON COALESCE(jksyj.F_ItemId, mx.px) = xmzl.F_Id
SET jksyj.F_PerformanceType = COALESCE(xmzl.fl3, '')
WHERE (jksyj.F_PerformanceType IS NULL OR jksyj.F_PerformanceType = '')
  AND jksyj.F_IsEffective = 1
  AND xmzl.F_Id IS NOT NULL;

-- 9. 更新退卡科技部老师业绩表(通过品项ID关联品项表的fl3字段)
UPDATE lq_hytk_kjbsyj kjbsyj
LEFT JOIN lq_hytk_mx mx ON kjbsyj.F_CardReturn = mx.F_Id
LEFT JOIN lq_xmzl xmzl ON COALESCE(kjbsyj.F_ItemId, mx.px) = xmzl.F_Id
SET kjbsyj.F_PerformanceType = COALESCE(xmzl.fl3, '')
WHERE (kjbsyj.F_PerformanceType IS NULL OR kjbsyj.F_PerformanceType = '')
  AND kjbsyj.F_IsEffective = 1
  AND xmzl.F_Id IS NOT NULL;

-- 10. 更新业绩明细表(lq_yjmxb)
-- 业绩明细表通常是汇总表,可能包含开单和消耗的数据
-- 由于无法准确判断每条记录的具体来源,这里先设置为空
-- 如果需要更精确的更新,可以根据业务逻辑关联其他表来判断
-- 例如:如果业绩明细表有开单编号字段,可以关联开单表判断为'开单'
-- 如果业绩明细表有耗卡编号字段,可以关联耗卡表判断为'消耗'
UPDATE lq_yjmxb 
SET F_PerformanceType = NULL
WHERE F_PerformanceType IS NULL OR F_PerformanceType = '';

-- 注意:如果业绩明细表有明确的关联字段,可以使用以下逻辑进行更精确的更新:
-- UPDATE lq_yjmxb yj
-- LEFT JOIN lq_kd_kdjlb kd ON yj.关联字段 = kd.F_Id
-- LEFT JOIN lq_xh_hyhk xh ON yj.关联字段 = xh.F_Id
-- SET yj.F_PerformanceType = CASE 
--     WHEN kd.F_Id IS NOT NULL THEN '开单'
--     WHEN xh.F_Id IS NOT NULL THEN '消耗'
--     ELSE NULL
-- END
-- WHERE yj.F_PerformanceType IS NULL OR yj.F_PerformanceType = '';

-- 验证更新结果(统计各表的业绩类型分布)
SELECT 
    'lq_kd_pxmx' as table_name,
    COUNT(*) as total_count,
    SUM(CASE WHEN F_PerformanceType IS NOT NULL AND F_PerformanceType != '' THEN 1 ELSE 0 END) as '已设置',
    SUM(CASE WHEN F_PerformanceType IS NULL OR F_PerformanceType = '' THEN 1 ELSE 0 END) as '未设置'
FROM lq_kd_pxmx
WHERE F_IsEffective = 1
UNION ALL
SELECT 
    'lq_kd_jksyj' as table_name,
    COUNT(*) as total_count,
    SUM(CASE WHEN F_PerformanceType IS NOT NULL AND F_PerformanceType != '' THEN 1 ELSE 0 END) as '已设置',
    SUM(CASE WHEN F_PerformanceType IS NULL OR F_PerformanceType = '' THEN 1 ELSE 0 END) as '未设置'
FROM lq_kd_jksyj
WHERE F_IsEffective = 1
UNION ALL
SELECT 
    'lq_kd_kjbsyj' as table_name,
    COUNT(*) as total_count,
    SUM(CASE WHEN F_PerformanceType IS NOT NULL AND F_PerformanceType != '' THEN 1 ELSE 0 END) as '已设置',
    SUM(CASE WHEN F_PerformanceType IS NULL OR F_PerformanceType = '' THEN 1 ELSE 0 END) as '未设置'
FROM lq_kd_kjbsyj
WHERE F_IsEffective = 1
UNION ALL
SELECT 
    'lq_xh_pxmx' as table_name,
    COUNT(*) as total_count,
    SUM(CASE WHEN F_PerformanceType IS NOT NULL AND F_PerformanceType != '' THEN 1 ELSE 0 END) as '已设置',
    SUM(CASE WHEN F_PerformanceType IS NULL OR F_PerformanceType = '' THEN 1 ELSE 0 END) as '未设置'
FROM lq_xh_pxmx
WHERE F_IsEffective = 1 OR F_IsEffective IS NULL
UNION ALL
SELECT 
    'lq_xh_jksyj' as table_name,
    COUNT(*) as total_count,
    SUM(CASE WHEN F_PerformanceType IS NOT NULL AND F_PerformanceType != '' THEN 1 ELSE 0 END) as '已设置',
    SUM(CASE WHEN F_PerformanceType IS NULL OR F_PerformanceType = '' THEN 1 ELSE 0 END) as '未设置'
FROM lq_xh_jksyj
WHERE F_IsEffective = 1 OR F_IsEffective IS NULL
UNION ALL
SELECT 
    'lq_xh_kjbsyj' as table_name,
    COUNT(*) as total_count,
    SUM(CASE WHEN F_PerformanceType IS NOT NULL AND F_PerformanceType != '' THEN 1 ELSE 0 END) as '已设置',
    SUM(CASE WHEN F_PerformanceType IS NULL OR F_PerformanceType = '' THEN 1 ELSE 0 END) as '未设置'
FROM lq_xh_kjbsyj
WHERE F_IsEffective = 1 OR F_IsEffective IS NULL
UNION ALL
SELECT 
    'lq_hytk_mx' as table_name,
    COUNT(*) as total_count,
    SUM(CASE WHEN F_PerformanceType IS NOT NULL AND F_PerformanceType != '' THEN 1 ELSE 0 END) as '已设置',
    SUM(CASE WHEN F_PerformanceType IS NULL OR F_PerformanceType = '' THEN 1 ELSE 0 END) as '未设置'
FROM lq_hytk_mx
WHERE F_IsEffective = 1
UNION ALL
SELECT 
    'lq_hytk_jksyj' as table_name,
    COUNT(*) as total_count,
    SUM(CASE WHEN F_PerformanceType IS NOT NULL AND F_PerformanceType != '' THEN 1 ELSE 0 END) as '已设置',
    SUM(CASE WHEN F_PerformanceType IS NULL OR F_PerformanceType = '' THEN 1 ELSE 0 END) as '未设置'
FROM lq_hytk_jksyj
WHERE F_IsEffective = 1
UNION ALL
SELECT 
    'lq_hytk_kjbsyj' as table_name,
    COUNT(*) as total_count,
    SUM(CASE WHEN F_PerformanceType IS NOT NULL AND F_PerformanceType != '' THEN 1 ELSE 0 END) as '已设置',
    SUM(CASE WHEN F_PerformanceType IS NULL OR F_PerformanceType = '' THEN 1 ELSE 0 END) as '未设置'
FROM lq_hytk_kjbsyj
WHERE F_IsEffective = 1;

-- 查看业绩类型的值分布(从品项表fl3字段)
SELECT 
    'lq_xmzl.fl3 值分布' as description,
    fl3 as performance_type,
    COUNT(*) as count
FROM lq_xmzl
WHERE fl3 IS NOT NULL AND fl3 != ''
GROUP BY fl3
ORDER BY count DESC;