修复业绩类型字段-根据品相表fl3更新.sql 11.3 KB
-- ============================================
-- 修复业绩类型字段:根据品相表fl3字段更新所有相关表的F_PerformanceType
-- ============================================
-- 说明:
-- 1. 此SQL用于修复因品相表(lq_xmzl)fl3字段设置错误导致的业绩类型问题
-- 2. 会更新所有开单、耗卡、退卡相关表的F_PerformanceType字段
-- 3. 更新逻辑:根据品相表的fl3字段,重新设置所有相关表的业绩类型
-- 4. 注意:此SQL会覆盖原有的F_PerformanceType值,请确保品相表的fl3字段已正确修复
-- 
-- 执行前请确认:
-- 1. 品相表(lq_xmzl)的fl3字段已经修复正确
-- 2. 已备份相关数据表
-- 3. 建议在测试环境先执行验证
-- ============================================

-- ============================================
-- 1. 更新开单品项表(lq_kd_pxmx)
-- ============================================
-- 通过品项ID(px字段)关联品相表的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_IsEffective = 1;

-- ============================================
-- 2. 更新开单健康师业绩表(lq_kd_jksyj)
-- ============================================
-- 优先使用F_ItemId,如果没有则通过F_kdpxid关联开单品项表获取品项ID
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_IsEffective = 1
  AND xmzl.F_Id IS NOT NULL;

-- ============================================
-- 3. 更新开单科技部老师业绩表(lq_kd_kjbsyj)
-- ============================================
-- 优先使用F_ItemId,如果没有则通过F_kdpxid关联开单品项表获取品项ID
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_IsEffective = 1
  AND xmzl.F_Id IS NOT NULL;

-- ============================================
-- 4. 更新消耗品项表(lq_xh_pxmx)
-- ============================================
-- 通过品项ID(px字段)关联品相表的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_IsEffective = 1 OR pxmx.F_IsEffective IS NULL);

-- ============================================
-- 5. 更新消耗健康师业绩表(lq_xh_jksyj)
-- ============================================
-- 优先使用F_ItemId,如果没有则通过F_kdpxid关联消耗品项表获取品项ID
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_IsEffective = 1 OR jksyj.F_IsEffective IS NULL)
  AND xmzl.F_Id IS NOT NULL;

-- ============================================
-- 6. 更新消耗科技部老师业绩表(lq_xh_kjbsyj)
-- ============================================
-- 优先使用F_ItemId,如果没有则通过F_hkpxid关联消耗品项表获取品项ID
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_IsEffective = 1 OR kjbsyj.F_IsEffective IS NULL)
  AND xmzl.F_Id IS NOT NULL;

-- ============================================
-- 7. 更新退卡明细表(lq_hytk_mx)
-- ============================================
-- 通过品项ID(px字段)关联品相表的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_IsEffective = 1;

-- ============================================
-- 8. 更新退卡健康师业绩表(lq_hytk_jksyj)
-- ============================================
-- 优先使用F_ItemId,如果没有则通过F_CardReturn关联退卡明细表获取品项ID
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_IsEffective = 1
  AND xmzl.F_Id IS NOT NULL;

-- ============================================
-- 9. 更新退卡科技部老师业绩表(lq_hytk_kjbsyj)
-- ============================================
-- 优先使用F_ItemId,如果没有则通过F_CardReturn关联退卡明细表获取品项ID
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_IsEffective = 1
  AND xmzl.F_Id IS NOT NULL;

-- ============================================
-- 10. 验证更新结果(统计各表的业绩类型分布)
-- ============================================
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;

-- ============================================
-- 11. 查看品相表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;

-- ============================================
-- 12. 查看各表业绩类型的值分布(用于对比验证)
-- ============================================
SELECT 
    'lq_kd_pxmx' as table_name,
    F_PerformanceType as performance_type,
    COUNT(*) as count
FROM lq_kd_pxmx
WHERE F_IsEffective = 1
  AND F_PerformanceType IS NOT NULL AND F_PerformanceType != ''
GROUP BY F_PerformanceType
UNION ALL
SELECT 
    'lq_kd_jksyj' as table_name,
    F_PerformanceType as performance_type,
    COUNT(*) as count
FROM lq_kd_jksyj
WHERE F_IsEffective = 1
  AND F_PerformanceType IS NOT NULL AND F_PerformanceType != ''
GROUP BY F_PerformanceType
UNION ALL
SELECT 
    'lq_kd_kjbsyj' as table_name,
    F_PerformanceType as performance_type,
    COUNT(*) as count
FROM lq_kd_kjbsyj
WHERE F_IsEffective = 1
  AND F_PerformanceType IS NOT NULL AND F_PerformanceType != ''
GROUP BY F_PerformanceType
UNION ALL
SELECT 
    'lq_xh_pxmx' as table_name,
    F_PerformanceType as performance_type,
    COUNT(*) as count
FROM lq_xh_pxmx
WHERE (F_IsEffective = 1 OR F_IsEffective IS NULL)
  AND F_PerformanceType IS NOT NULL AND F_PerformanceType != ''
GROUP BY F_PerformanceType
UNION ALL
SELECT 
    'lq_xh_jksyj' as table_name,
    F_PerformanceType as performance_type,
    COUNT(*) as count
FROM lq_xh_jksyj
WHERE (F_IsEffective = 1 OR F_IsEffective IS NULL)
  AND F_PerformanceType IS NOT NULL AND F_PerformanceType != ''
GROUP BY F_PerformanceType
UNION ALL
SELECT 
    'lq_xh_kjbsyj' as table_name,
    F_PerformanceType as performance_type,
    COUNT(*) as count
FROM lq_xh_kjbsyj
WHERE (F_IsEffective = 1 OR F_IsEffective IS NULL)
  AND F_PerformanceType IS NOT NULL AND F_PerformanceType != ''
GROUP BY F_PerformanceType
UNION ALL
SELECT 
    'lq_hytk_mx' as table_name,
    F_PerformanceType as performance_type,
    COUNT(*) as count
FROM lq_hytk_mx
WHERE F_IsEffective = 1
  AND F_PerformanceType IS NOT NULL AND F_PerformanceType != ''
GROUP BY F_PerformanceType
UNION ALL
SELECT 
    'lq_hytk_jksyj' as table_name,
    F_PerformanceType as performance_type,
    COUNT(*) as count
FROM lq_hytk_jksyj
WHERE F_IsEffective = 1
  AND F_PerformanceType IS NOT NULL AND F_PerformanceType != ''
GROUP BY F_PerformanceType
UNION ALL
SELECT 
    'lq_hytk_kjbsyj' as table_name,
    F_PerformanceType as performance_type,
    COUNT(*) as count
FROM lq_hytk_kjbsyj
WHERE F_IsEffective = 1
  AND F_PerformanceType IS NOT NULL AND F_PerformanceType != ''
GROUP BY F_PerformanceType
ORDER BY table_name, count DESC;

-- ============================================
-- SQL脚本执行完成
-- ============================================
-- 说明:
-- 1. 此SQL会根据品相表(lq_xmzl)的fl3字段,更新所有相关表的F_PerformanceType字段
-- 2. 更新覆盖所有有效记录,不管原来的值是什么
-- 3. 执行后请查看验证结果,确认更新是否正确
-- 4. 如果发现数据异常,请及时回滚或联系开发人员