这段SQL语句的各个意思?

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图

SELECT
tt.ItemCode AS ItemCode,
tt.ItemName AS ItemName,
tt.BatchNum AS BatchNum,
sum(tt.Quantity) AS Quantity,
tt.InvntryUom AS InvntryUom,
tt.WhsCode AS WhsCode,
tt. STATUS AS STATUS,
tt.StorageTime AS StorageTime
FROM
(
SELECT
T2.CODE AS ItemCode,
T2.NAME AS ItemName,
T1.LOT_INFO_LOT AS BatchNum,
T0.QTY_BASE_QTY AS Quantity,
T0.QTY_PACKAGE_NAME AS InvntryUom,
T1.LOT_INFO_ERP_CODE AS WhsCode,
T0.INV_TYPE AS STATUS,
now() AS StorageTime,
T0.ID
FROM
wms_inventory T0
LEFT JOIN wms_item_key T1 ON T0.SKU_ITEM_KEY_ID = T1.ID
LEFT JOIN wms_item T2 ON T2.ID = T1.ITEM_ID
LEFT JOIN wms_asn asn ON asn.CUSTOMER_BILL = T1.LOT_INFO_ASN_CUSTOMER_BILL
LEFT JOIN wms_bill_type billType ON asn.BILL_TYPE_ID = billType.ID
WHERE
QTY_BASE_QTY <> 0
AND T1.LOT_INFO_ERP_CODE IN (
101,
103,
104,
108,
201,
301,
302,
307,
412,
903
)
AND (
billType.ID IN (13, 14, 15, 16, 17)
OR (
billType.ID IN (12)
AND asn.BE_FEEDBACK = TRUE
)
OR billType.ID IS NULL
)
AND T2.LOT = 'Y'
AND T0.INV_TYPE = 'Normal'
GROUP BY
T2.CODE,
T2.NAME,
T1.LOT_INFO_LOT,
T0.QTY_BASE_QTY,
T0.QTY_PACKAGE_NAME,
T1.LOT_INFO_ERP_CODE,
T0.INV_TYPE,
T0.ID
ORDER BY
T2.CODE,
T1.LOT_INFO_LOT
) tt
GROUP BY
tt.ItemCode,
tt.BatchNum,
tt.WhsCode

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

语句中的各个意思

从代码中能看到的意思如下:
总共分为内外两个查询,
先看内部查询:从关联表中筛选过查询条件,筛选完之后根据分组字段分组,然后(排序字段1)排序,查询出字段(字段2),生成新的结果表。
外部结构的意思是:在结果表中再排序(排序字段2),查询出字段(字段1)最后展示结果。
注:其中的AS后表示起的别名,ON后面的条件是两表之间的关系条件,IN后是属性包含的值,AND的是关联词(并且),OR是关联词(或者),IS NULL是不为空。
具体干了啥内容,就要看你表存储的是什么?条件是什么情况下?业务是什么?这就没有办法帮你解析了。

img

具体什么意思,要根据你的业务去理解。
你要知道里面用到了什么,比如求和函数sum()、子查询、连接查询、group by 分组等。
然后大概看下sql语句就行,sql不是自己写的,这么复杂的,没办法去理解具体意思。

这段sql里没看到有任何特殊的语法,关联几个表求个和而已,不知道你是哪里看不懂。
如果是问业务含义的话,应该没人比你内部人员更懂你自己公司的业务了吧?
我根据以往工作的经验,大概给你分析一下查玩意查的是啥

  1. 表名以wms开头,说明这是个物流仓库管理系统,
  2. wms_inventory 是库存表,wms_item 是商品主档表,wms_asn 是asn单据表(有些地方叫装运装载),wms_bill_type 是单据类型表
  3. QTY_BASE_QTY <> 0 表示基本数量不等于0(可能就是库存数量),
  4. T1.LOT_INFO_ERP_CODE IN () ,从这个字段起的别名WhsCode来看,可能是仓库(warehouse)代码,也就是只查这10个仓库的数据
  5. billType.ID IN (13, 14, 15, 16, 17)表示查这5种单据类型
  6. billType.ID IN (12) AND asn.BE_FEEDBACK = TRUE 表示在单据类型为12的时候,需要同时满足后面这个条件才进行统计,也就是说这种单据可能存在多个中间状态
  7. T0.INV_TYPE = 'Normal' 这玩意应该是查的正常库存,也就是说这个库存表里面可能还有不正常的库存,比如临期、过期、破损之类的,只需要统计库存类型为正常的
  8. 最后查出来的几个字段就是商品编码、商品名称、批次号、数量(来自ASN单据中商品数量的合计)、库存单位(比如个、瓶、克之类的)、仓库代码、状态、取数时间
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632