-- ============================================================
-- 迁移脚本：修正 dwd_store_goods_sale.discount_price 列名误导
-- 日期：2026-02-20
-- 问题：DWD discount_price 实际映射自 ODS discount_money（折扣金额），
--       而非 ODS discount_price（折后单价），列名存在语义误导。
-- 修正：
--   1. 将 DWD 列 discount_price 重命名为 discount_money（反映真实语义：折扣金额）
--   2. 新增 DWD 列 discount_price（numeric），映射 ODS discount_price（折后单价）
--   3. 更新 COMMENT 以反映正确的语义和 ODS 来源
-- 后续操作：需重新执行 DWD_LOAD_FROM_ODS 任务以填充新 discount_price 列
-- ============================================================

BEGIN;

-- 步骤 1：将现有 discount_price 列重命名为 discount_money
ALTER TABLE dwd.dwd_store_goods_sale
    RENAME COLUMN discount_price TO discount_money;

-- 步骤 2：新增 discount_price 列（折后单价）
ALTER TABLE dwd.dwd_store_goods_sale
    ADD COLUMN discount_price NUMERIC(18,2);

-- 步骤 3：更新列注释
COMMENT ON COLUMN dwd.dwd_store_goods_sale.discount_money IS
    '【说明】折扣金额，即原价被减免的金额部分。'
    '     【示例】0.0。'
    '     【ODS来源】store_goods_sales_records - discount_money。'
    '     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - discount_money。';

COMMENT ON COLUMN dwd.dwd_store_goods_sale.discount_price IS
    '【说明】折后单价（元/单位），即应用折扣后的商品单价。'
    '     【示例】5.00。'
    '     【ODS来源】store_goods_sales_records - discount_price。'
    '     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - discount_price。';

COMMIT;

-- ============================================================
-- 回滚脚本（如需撤销）：
-- BEGIN;
-- ALTER TABLE dwd.dwd_store_goods_sale DROP COLUMN IF EXISTS discount_price;
-- ALTER TABLE dwd.dwd_store_goods_sale RENAME COLUMN discount_money TO discount_price;
-- COMMENT ON COLUMN dwd.dwd_store_goods_sale.discount_price IS
--     '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】store_goods_sales_records - discount_money。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - discount_money。';
-- COMMIT;
-- ============================================================

-- ============================================================
-- 验证 SQL（迁移后执行）：
--
-- 1. 确认 discount_money 列存在且注释正确
-- SELECT column_name, data_type, numeric_precision, numeric_scale
-- FROM information_schema.columns
-- WHERE table_schema = 'dwd'
--   AND table_name = 'dwd_store_goods_sale'
--   AND column_name = 'discount_money';
--
-- 2. 确认 discount_price 列已新增
-- SELECT column_name, data_type, numeric_precision, numeric_scale
-- FROM information_schema.columns
-- WHERE table_schema = 'dwd'
--   AND table_name = 'dwd_store_goods_sale'
--   AND column_name = 'discount_price';
--
-- 3. 确认两列均存在（应返回 2 行）
-- SELECT column_name
-- FROM information_schema.columns
-- WHERE table_schema = 'dwd'
--   AND table_name = 'dwd_store_goods_sale'
--   AND column_name IN ('discount_money', 'discount_price')
-- ORDER BY column_name;
--
-- 4. 重新加载后抽样验证 discount_money 与 discount_price 值不同
-- SELECT discount_money, discount_price,
--        (discount_money = discount_price) AS same
-- FROM dwd.dwd_store_goods_sale
-- WHERE discount_price IS NOT NULL
-- LIMIT 20;
-- ============================================================
