添加开单记录表升单类型字段.sql 4.33 KB
-- ============================================
-- 为开单记录表添加升单类型字段
-- ============================================
-- 说明:此脚本为开单记录表添加升单类型标记字段,用于标识再次开单时包含的品项类型
-- 
-- 字段说明:
-- 1. F_UpgradeLifeBeauty:升生美(再次开单时,包含生美品项的订单)
-- 2. F_UpgradeTechBeauty:升科美(再次开单时,包含科美品项的订单)
-- 3. F_UpgradeMedicalBeauty:升医美(再次开单时,包含医美品项的订单)
-- 
-- 业务含义:
-- - 升单:已经开过会员再次消费属于升单
-- - 这三个字段用于标记升单中是否包含对应类型的品项(生美、科美、医美)
-- 
-- 注意事项:
-- - 字段类型为VARCHAR(10),可存储"是"/"否"或其他标记值
-- - 所有字段允许为NULL,因为历史数据可能没有这些标记
-- - 字段位置:放在 F_SupplementAmount 之后

-- ============================================
-- 1. lq_kd_kdjlb(开单记录表) - 添加升单类型字段
-- ============================================
ALTER TABLE lq_kd_kdjlb 
ADD COLUMN F_UpgradeLifeBeauty VARCHAR(10) NULL COMMENT '升生美(再次开单时,包含生美品项的订单)' AFTER F_SupplementAmount,
ADD COLUMN F_UpgradeTechBeauty VARCHAR(10) NULL COMMENT '升科美(再次开单时,包含科美品项的订单)' AFTER F_UpgradeLifeBeauty,
ADD COLUMN F_UpgradeMedicalBeauty VARCHAR(10) NULL COMMENT '升医美(再次开单时,包含医美品项的订单)' AFTER F_UpgradeTechBeauty;

-- ============================================
-- 2. 验证字段创建
-- ============================================
-- 验证 lq_kd_kdjlb 表
-- SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_COMMENT 
-- FROM INFORMATION_SCHEMA.COLUMNS 
-- WHERE TABLE_NAME = 'lq_kd_kdjlb' 
--   AND (COLUMN_NAME = 'F_UpgradeLifeBeauty' 
--     OR COLUMN_NAME = 'F_UpgradeTechBeauty' 
--     OR COLUMN_NAME = 'F_UpgradeMedicalBeauty');

-- ============================================
-- 3. 业务逻辑说明(供参考)
-- ============================================
-- 判断逻辑:
-- 1. 判断是否为升单:查询该会员(kdhy)是否有历史开单记录
-- 2. 判断是否包含生美:查询该开单的品项明细(lq_kd_pxmx)中是否有品项类型(lq_xmzl.qt2)为"生美"的记录
-- 3. 判断是否包含科美:查询该开单的品项明细中是否有品项类型为"科美"的记录
-- 4. 判断是否包含医美:查询该开单的品项明细中是否有品项类型为"医美"的记录
-- 
-- 示例SQL(判断升单并标记品项类型):
-- UPDATE lq_kd_kdjlb kdjlb
-- SET 
--     F_UpgradeLifeBeauty = CASE 
--         WHEN EXISTS (
--             SELECT 1 FROM lq_kd_kdjlb kd2 
--             WHERE kd2.kdhy = kdjlb.kdhy 
--               AND kd2.F_Id != kdjlb.F_Id 
--               AND kd2.kdrq < kdjlb.kdrq
--         ) AND EXISTS (
--             SELECT 1 FROM lq_kd_pxmx pxmx
--             INNER JOIN lq_xmzl xmzl ON pxmx.px = xmzl.F_Id
--             WHERE pxmx.glkdbh = kdjlb.F_Id
--               AND pxmx.F_IsEffective = 1
--               AND xmzl.qt2 = '生美'
--         ) THEN '是'
--         ELSE '否'
--     END,
--     F_UpgradeTechBeauty = CASE 
--         WHEN EXISTS (
--             SELECT 1 FROM lq_kd_kdjlb kd2 
--             WHERE kd2.kdhy = kdjlb.kdhy 
--               AND kd2.F_Id != kdjlb.F_Id 
--               AND kd2.kdrq < kdjlb.kdrq
--         ) AND EXISTS (
--             SELECT 1 FROM lq_kd_pxmx pxmx
--             INNER JOIN lq_xmzl xmzl ON pxmx.px = xmzl.F_Id
--             WHERE pxmx.glkdbh = kdjlb.F_Id
--               AND pxmx.F_IsEffective = 1
--               AND xmzl.qt2 = '科美'
--         ) THEN '是'
--         ELSE '否'
--     END,
--     F_UpgradeMedicalBeauty = CASE 
--         WHEN EXISTS (
--             SELECT 1 FROM lq_kd_kdjlb kd2 
--             WHERE kd2.kdhy = kdjlb.kdhy 
--               AND kd2.F_Id != kdjlb.F_Id 
--               AND kd2.kdrq < kdjlb.kdrq
--         ) AND EXISTS (
--             SELECT 1 FROM lq_kd_pxmx pxmx
--             INNER JOIN lq_xmzl xmzl ON pxmx.px = xmzl.F_Id
--             WHERE pxmx.glkdbh = kdjlb.F_Id
--               AND pxmx.F_IsEffective = 1
--               AND xmzl.qt2 = '医美'
--         ) THEN '是'
--         ELSE '否'
--     END
-- WHERE kdjlb.F_IsEffective = 1;