select a.wareid as 商品编码,left(a.warename,20) as 品名,a.barcode as 条形码,a.producer as 生产企业,  a.warekind as 等级规格,a.warespec as 商品规格,a.wareunit as 计价单位,a.createuser as 物价员,e.saleprice as 零售价,e.memprice as 会员价,dbo.f_get_classname(a.wareid,'03','max') as 剂型 , c.classcode as 品类编码 ,b.maxunit as 编码,isnull(dbo.f_get_class('01',d.wareid),'')+'0'+isnull(dbo.f_get_class('31',d.wareid),'')+isnull(dbo.f_get_class('03',d.wareid),'') as 类码 ,left(a.prod_add,2) as 产地,dbo.f_get_classname(a.wareid,'35','max') as abc,e.groupid as ID,case when g.insuranceno='1' then '医保药品' else '' end as 医保标志   from u_ware a,u_ware_q b,u_ware_class c,#warelist_1 d  ,u_ware_saleprice e,c_org_busi f,u_ware_ext g where a.wareid=b.wareid  and  a.wareid = c.wareid and  parentcode  = '03'  and  d.wareid =  a.wareid and e.wareid=d.wareid and e.groupid=f.salegroup and d.busno=f.busno and a.wareid=g.wareid

SQL查询解析

以下是对该SQL语句的结构化解析,按核心模块拆解说明:


一、查询目标字段

SELECT子句定义了13个输出字段,包含基础信息、分类编码、价格及标志位:

字段名 来源与逻辑 说明
商品编码 a.wareid 商品唯一ID
品名 LEFT(a.warename,20) 商品名称前20字符
条形码 a.barcode 商品条形码
生产企业 a.producer 制造商名称
等级规格 a.warekind 商品等级(如一级、特级)
商品规格 a.warespec 规格描述(如100ml/瓶)
计价单位 a.wareunit 销售单位(如盒、件)
物价员 a.createuser 定价操作员
零售价 e.saleprice 标准售价
会员价 e.memprice 会员专属价格
剂型 dbo.f_get_classname(a.wareid,'03','max') 药品剂型(如片剂、胶囊)
品类编码 c.classcode 商品分类编码
编码 b.maxunit 库存单位编码
类码 ISNULL(类码1,'') + '0' + ISNULL(类码2,'') + ISNULL(类码3,'') 组合分类标识符
产地 LEFT(a.prod_add,2) 产地省份缩写
abc dbo.f_get_classname(a.wareid,'35','max') ABC库存分类(如A类货)
ID e.groupid 价格组ID
医保标志 CASE WHEN g.insuranceno='1' THEN '医保药品' ELSE '' END 医保药品标识

关键函数说明

  • f_get_classname(wareid,分类码,'max'):获取商品在指定分类体系下的最顶层分类名称
  • f_get_class(分类码,wareid):获取商品在分类体系中的编码

二、数据来源表

共关联7张表,别名与作用如下:

  1. u_ware a:商品主表(核心属性)
  2. u_ware_q b:商品库存单位表
  3. u_ware_class c:商品分类关联表
  4. #warelist_1 d:临时表(过滤目标商品,可能是会话级临时表)
  5. u_ware_saleprice e:商品价格表(多价格组支持)
  6. c_org_busi f:业务组织表(关联门店与价格组)
  7. u_ware_ext g:商品扩展表(医保等附加属性)

三、表连接逻辑

通过WHERE子句实现多表精确关联:


a.wareid = b.wareid -- 商品与库存单位关联 AND a.wareid = c.wareid -- 商品与分类关联 AND c.parentcode = '03' -- 限定分类体系03(如药品剂型) AND d.wareid = a.wareid -- 临时表过滤有效商品 AND e.wareid = d.wareid -- 商品与价格关联 AND e.groupid = f.salegroup -- 价格组匹配业务组织 AND d.busno = f.busno -- 门店编号匹配 AND a.wareid = g.wareid -- 商品与扩展属性关联

关联路径主商品 → 库存 → 分类 → 临时表 → 价格 → 业务组织 → 扩展属性


四、业务意图分析

该查询旨在生成商品主数据报表,包含:

  1. 基础属性:品名、条码、规格、单位
  2. 分类体系:剂型(03体系)、品类、ABC分类(35体系)、组合类码
  3. 价格管理:零售价/会员价及其所属价格组
  4. 业务标识:医保药品标志、产地、定价责任人
  5. 数据过滤:通过临时表#warelist_1动态控制输出范围

典型应用场景

  • 药店/超市的商品主数据维护系统
  • 商品定价与医保资质管理看板
  • 供应链分类统计报表

五、潜在优化建议
  1. 函数性能f_get_classname多次调用可能影响效率,建议改用JOIN预关联分类表
  2. 临时表:确认#warelist_1的生成逻辑,避免全量商品扫描
  3. 字段冗余类码字段通过字符串拼接生成,需确保业务必要性
  4. 索引优化:在wareid, parentcode, busno, groupid等字段建立索引

通过解析可见,该SQL是典型的商品主数据多维查询,覆盖商品管理的核心业务属性。

以上内容均由AI搜集总结并生成,仅供参考

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐