SELECT a.[日期],
MAX(CASE WHEN a.Years = '2019-01' THEN a.TotalStock ELSE 0 END) AS 'Jan',
MAX(CASE WHEN a.Years = '2019-02' THEN a.TotalStock ELSE 0 END) AS 'Feb',
MAX(CASE WHEN a.Years = '2019-03' THEN a.TotalStock ELSE 0 END) AS 'Mar',
MAX(CASE WHEN a.Years = '2019-04' THEN a.TotalStock ELSE 0 END) AS 'Apr',
MAX(CASE WHEN a.Years = '2019-05' THEN a.TotalStock ELSE 0 END) AS 'May',
MAX(CASE WHEN a.Years = '2019-06' THEN a.TotalStock ELSE 0 END) AS 'Jun',
MAX(CASE WHEN a.Years = '2019-07' THEN a.TotalStock ELSE 0 END) AS 'Jul',
MAX(CASE WHEN a.Years = '2019-08' THEN a.TotalStock ELSE 0 END) AS 'Aug',
MAX(CASE WHEN a.Years = '2019-09' THEN a.TotalStock ELSE 0 END) AS 'Sept',
MAX(CASE WHEN a.Years = '2019-10' THEN a.TotalStock ELSE 0 END) AS 'Oct',
MAX(CASE WHEN a.Years = '2019-11' THEN a.TotalStock ELSE 0 END) AS 'Nov',
MAX(CASE WHEN a.Years = '2019-12' THEN a.TotalStock ELSE 0 END) AS 'Dec',
MAX(CASE WHEN a.Years IS NULL THEN a.TotalStock ELSE 0 END) AS '合计'
 FROM (
SELECT  CASE WHEN GROUPING(a.[日期]) = '1' THEN '总计'
                        WHEN GROUPING(a.[日期]) = '0' AND GROUPING(a.Years) = 1 THEN a.[日期] ELSE a.[日期] END '日期',
SUM(a.TotalStock) AS TotalStock, a.Years 
FROM(
SELECT  CONVERT(varchar(7) ,b.DeliveryDate, 120) AS Years, COUNT (b.Qrcode) AS TotalStock, '退货数量' AS 日期
FROM App_AfterSalesOrder a LEFT JOIN App_AfterSalesOrderDetail b ON a.OrderNo = b.OrderNo 
LEFT JOIN Base_GoodsInfo c ON b.ProductID = replace(ltrim(replace(c.ProductID, '0', ' ')    ),    ' ',    '0')
WHERE b.DeliveryDate >= '2019-01-01' AND b.DeliveryDate < '2020-01-01' AND a.IsExam = 1 AND b.Status = 1 AND c.Standard = '6-QW-48(430)'
GROUP BY    CONVERT(varchar(7) ,b.DeliveryDate, 120)
UNION 
SELECT   CONVERT(varchar(7) ,a.AccountDate, 120) AS Years, SUM(b.ArrivalAmount) AS TotalStock, '进货数量' AS 日期
FROM Sap_DelivRecode a 
--LEFT JOIN Sap_DelivRecodeDetail b ON a.OrderNo = b.OrderNo
LEFT JOIN App_PurchaseOrderDetail b ON a.OrderNo = b.DelivNo
LEFT JOIN Base_GoodsInfo c ON b.ProductID = c.ProductID
WHERE a.AccountDate >= '2019-01-01' AND a.AccountDate < '2020-01-01' AND c.Brand IN ('超威', '象王', '莫尔')
AND c.Standard = '6-QW-48(430)'
GROUP BY    CONVERT(varchar(7) ,a.AccountDate, 120) )a
GROUP BY a.[日期], a.Years with rollup
) a
GROUP BY a.[日期]

1.增加小计总结时,with rollup 与 case when 一起使用,分组SUM求和

2.行转列 使用case when 

3.单独增加一列,直接赋值并 AS 新的字段名

4.连接表使用union,两表字段数量类型排序须一致

 

 

 

 

posted on 2021-06-26 10:29  琳音  阅读(1017)  评论(0)    收藏  举报