创建开单详细记录视图.sql 3.53 KB
-- 创建开单详细记录视图(简化版)
-- 功能:联合开单记录表、开单品项明细表、项目资料表,呈现开单详细记录
-- 包含:开单编号、开单会员、会员手机号、开单时间、开单品项、项目数量、项目单价、项目总价、来源类型、项目分类3

CREATE VIEW v_order_detail_simple AS
SELECT 
    kd.F_Id AS order_id,                    -- 开单编号
    kd.kdhy AS order_member,                -- 开单会员
    kd.kdhysjh AS member_phone,             -- 会员手机号
    kd.kdrq AS order_time,                  -- 开单时间
    px.px AS item_code,                     -- 开单品项(项目编号)
    px.pxmc AS item_name,                   -- 品项名称
    COALESCE(px.F_ProjectNumber, 1) AS project_count,  -- 项目数量(默认为1)
    px.pxjg AS project_unit_price,          -- 项目单价
    (COALESCE(px.F_ProjectNumber, 1) * px.pxjg) AS project_total_price,  -- 项目总价(数量*单价)
    px.F_SourceType AS source_type,         -- 来源类型
    xm.fl3 AS project_category3             -- 项目分类3

FROM 
    lq_kd_kdjlb kd
    LEFT JOIN lq_kd_pxmx px ON kd.F_Id = px.glkdbh
    LEFT JOIN lq_xmzl xm ON px.px = xm.F_Id
WHERE 
    kd.F_Id IS NOT NULL
    AND px.F_Id IS NOT NULL  -- 只显示有品项明细的开单
ORDER BY 
    kd.kdrq DESC, 
    kd.F_Id, 
    px.F_Id;

-- 创建相关索引以优化查询性能
CREATE INDEX IF NOT EXISTS idx_lq_kd_pxmx_glkdbh ON lq_kd_pxmx(glkdbh);
CREATE INDEX IF NOT EXISTS idx_lq_kd_pxmx_px ON lq_kd_pxmx(px);
CREATE INDEX IF NOT EXISTS idx_lq_xmzl_fl3 ON lq_xmzl(fl3);
CREATE INDEX IF NOT EXISTS idx_lq_kd_kdjlb_kdrq ON lq_kd_kdjlb(kdrq);

-- 使用示例查询:
-- 1. 查询所有开单详细记录
-- SELECT * FROM v_order_detail_simple ORDER BY order_time DESC;

-- 2. 查询指定开单编号的详细记录
-- SELECT * FROM v_order_detail_simple WHERE order_id = '具体开单编号';

-- 3. 查询指定会员的开单记录
-- SELECT * FROM v_order_detail_simple WHERE order_member = '具体会员ID' ORDER BY order_time DESC;

-- 4. 查询指定分类3的开单记录
-- SELECT * FROM v_order_detail_simple WHERE project_category3 = '具体分类3名称' ORDER BY order_time DESC;

-- 5. 查询指定来源类型的开单记录
-- SELECT * FROM v_order_detail_simple WHERE source_type = '具体来源类型' ORDER BY order_time DESC;

-- 6. 查询指定日期范围的开单记录
-- SELECT * FROM v_order_detail_simple 
-- WHERE order_time >= '2024-01-01' AND order_time <= '2024-12-31' 
-- ORDER BY order_time DESC;

-- 7. 按分类3统计开单数量和总金额
-- SELECT 
--     project_category3,
--     COUNT(*) AS record_count,
--     SUM(project_total_price) AS total_amount
-- FROM v_order_detail_simple 
-- WHERE project_category3 IS NOT NULL
-- GROUP BY project_category3 
-- ORDER BY total_amount DESC;

-- 8. 按来源类型统计开单数量和总金额
-- SELECT 
--     source_type,
--     COUNT(*) AS record_count,
--     SUM(project_total_price) AS total_amount
-- FROM v_order_detail_simple 
-- WHERE source_type IS NOT NULL
-- GROUP BY source_type 
-- ORDER BY total_amount DESC;

-- 9. 查询项目总价大于指定金额的记录
-- SELECT * FROM v_order_detail_simple WHERE project_total_price > 1000 ORDER BY project_total_price DESC;

-- 10. 按会员统计开单数量和总金额
-- SELECT 
--     order_member,
--     member_phone,
--     COUNT(*) AS order_count,
--     SUM(project_total_price) AS total_amount
-- FROM v_order_detail_simple 
-- GROUP BY order_member, member_phone 
-- ORDER BY total_amount DESC;