sql题目:
有以下三张表:
客户基本信息表:
CUSTOMER_INFO
(
CUSTOMER_ID INTEGER 客户ID,
CUSTOMER_CODE VARCHAR(255) 客户编码 ,
CUSTOMER_NAME VARCHAR(255) 客户名称 ,
FCOMORGID INTEGER 库存组织ID ,
FCOMORGNAME VARCHAR(255) 库存组织 ,
OFFICE_code VARCHAR(255) 办事处编码 ,
OFFICE_NAME VARCHAR(255) 办事处 ,
REGION_CODE VARCHAR(255) 大区编码 ,
REGION_NAME VARCHAR(255) 大区 ,
CENTRAL_CODE VARCHAR(255) 管理中心编码 ,
CENTRAL_NAME VARCHAR(255) 管理中心
)
客户组明细表:
CUSTOMER_GROUP
(CUSTOMER_ID INTEGER 客户ID,
CUSTOMER_NAME VARCHAR(255) 客户名称,
CUSTOMER_CODE VARCHAR(255) 客户编码,
CUSTOMER_GROUP_ID INTEGER 客户组ID,
CUSTOMER_GROUP_NAME VARCHAR(255) 客户组名称
)
客户销售订单明细表:
CUSTOMER_SALEISSUEBILL
(
FID INTEGER 销售出库单ID,
FSTORAGEORGUNITID INTEGER 库存组织ID,
FCREATETIME DATETIME 单据创建日期,
FCUSTOMERID INTEGER 客户ID,
FAMOUNT DECIMAL(12,2) 销售金额,
FDISCOUNTAMOUNT DECIMAL(12,2) 折扣额,
FQTY INTEGER 数量,
FMATERIAL_ID INTEGER 品项ID,
FMATERIAL_NAME VARCHAR(255) 品项名称,
FMATERIAL_CODE VARCHAR(255) 品项编码,
FMODEL VARCHAR(255) 规格型号,
FASSISTPROPERTYID INTEGER 辅助属性ID,
FASSISTPROPERTY_NAME VARCHAR(255) 辅助属性,
FBASEUNIT INTEGER 计量单位ID,
FBASEUNIT_NAME VARCHAR(255) 计量单位
)
要求通过一段SQL语句: 计算出当月数量,当月实际销售额,当月同期数量,当月同期实际销售额 (其中:实际销售额=销售金额-折扣额)
最终得出结果包含以下字段:年月格式例如:'202201'
年月,
库存组织,
管理中心,
大区,
办事处,
客户ID,
客户名称,
客户编码,
客户组ID,
客户组名称,
品项ID,
品项名称,
品项编码,
规格型号,
计量单位,
当月数量,
当月实际销售额,
当月同期数量,
当月同期实际销售额
SELECT
concat(substr(STR_TO_DATE(FCREATETIME,'%Y-%m-%d'),1,4),substr(STR_TO_DATE(FCREATETIME,'%Y-%m-%d'),6,2)) as 年月,
FCOMORGNAME as 库存组织,
CENTRAL_NAME as 管理中心,
REGION_NAME as 大区,
OFFICE_NAME as 办事处,
CI.CUSTOMER_ID AS 客户ID,
CI.CUSTOMER_NAME AS 客户名称,
CI.CUSTOMER_CODE 客户编码,
CUSTOMER_GROUP_ID AS 客户组ID,
CUSTOMER_GROUP_NAME AS 客户组名称,
FMATERIAL_ID AS 品项ID,
FMATERIAL_NAME AS 品项名称,
FMATERIAL_CODE AS 品项编码,
FMODEL AS 规格型号,
FBASEUNIT_NAME AS 计量单位,
SUM(FQTY) AS 当月数量,
SUM(FAMOUNT) AS 当月实际销售额,
SUM(CASE WHEN STR_TO_DATE(FCREATETIME,'%Y-%m') = STR_TO_DATE(DATE_SUB(curdate(), INTERVAL 1 YEAR),'%Y-%m') THEN FQTY ELSE 0 END) AS 当月同期数量,
SUM(FAMOUNT - FDISCOUNTAMOUNT) AS 当月同期实际销售额
FROM CUSTOMER_INFO CI
LEFT JOIN CUSTOMER_GROUP CG
ON CI.CUSTOMER_ID = CG.CUSTOMER_ID
LEFT JOIN CUSTOMER_SALEISSUEBILL CS
ON CI.CUSTOMER_ID = CS.CUSTOMER_ID
GROUP BY
年月,
库存组织,
管理中心,
大区,
办事处,
客户ID,
客户名称,
客户编码,
客户组ID,
客户组名称,
品项ID,
品项名称,
品项编码,
规格型号,
计量单位;
SELECT
current.yd AS 年月,
FSTORAGEORGUNITID AS 库存组织,
CENTRAL_NAME AS 管理中心,
REGION_NAME AS 大区,
OFFICE_NAME AS 办事处,
current.ID AS 客户ID,
CUSTOMER_NAME AS 客户名称,
CUSTOMER_CODE AS 客户编码,
CUSTOMER_GROUP_ID AS 客户组ID,
CUSTOMER_FROUP_NAME AS 客户组名称,
current.FMATERIAL_ID AS 品项ID,
current.FMATERIAL_NAME AS 品项名称,
current.FMATERIAL_CODE AS 品项编码,
current.FMODEL AS 规格型号,
current.FBASEUNIT_NAME AS 计量单位,
SUM(FQTY) AS 当月数量,
SUM(FAMOUNT-FDISCOUNTAMOUNT) AS 当月实际销售额,
last_amount AS 当月同期数量,
last_profit AS 当月同期实际销售额
from CUSTOMER_INFO b
join CUSTOMER_GROUP c on b.CUSTOMER_ID = c.CUSTOMER_ID
join (
select FCUSTOMERID as ID,FMATERIAL_NAME,FMATERIAL_CODE,FMODEL,FBASEUNIT_NAME,
DATE_FORMAT(FCREATEDATE,'%Y%m') as yd,
year(FCREATEDATE) AS year,
month(FCREATEDATE) AS month,
SUM(FQTY) AS amount,
SUM(FAMOUNT-FDISCOUNTAMOUNT) AS profit
from CUSTOMER_SALEISSUEBILL
GROUP BY DATE_FORMAT(FCREATEDATE,'%Y%m')
) current on current.ID = b.CUSTOMER_ID
left join (
select year(FCREATEDATE) AS year,
month(FCREATEDATE) AS month,
SUM(FQTY) AS amount,
SUM(FAMOUNT-FDISCOUNTAMOUNT) AS profit
from CUSTOMER_SALEISSUEBILL
GROUP BY DATE_FORMAT(FCREATEDATE,'%Y%m')
) last_year on current.year -1 = last_year.year and current.month = last_year.month;
```