我有以下代码,其中显示了按月和每个销售区域的销售数据:
SELECT
YEAR(date) as MyYear, DAB000.SalesRegion,
type,
SUM(CASE WHEN MONTH(date) = 1 THEN ROUND(value) END) as jan,
SUM(CASE WHEN MONTH(date) = 2 THEN ROUND(value) END) as feb,
SUM(CASE WHEN MONTH(date) = 3 THEN ROUND(value) END) as mar
FROM
(
SELECT DAB020.*
FROM
(SELECT date, 'revenue' as type, value, buart, auf_kumsta,PERSNR FROM "DAB020.ADT"
UNION ALL
SELECT date, 'margin' as type, value - (menge*ekp/pe), buart, auf_kumsta,PERSNR FROM "DAB020.ADT"
) DAB020
WHERE buart = 'A' AND auf_kumsta = 'J' AND date >= '2021-01-01'
) mysalesdata
left join "DF030000.DBF" DAB000 on mysalesdata.PERSNR = DAB000.KDNR
GROUP BY YEAR(date),DAB000.SalesRegion, type
ORDER BY
CASE WHEN DAB000.SalesRegion = 2 THEN 0
WHEN DAB000.SalesRegion = 1 THEN 1
WHEN DAB000.SalesRegion = 3 THEN 2
WHEN DAB000.SalesRegion = 4 THEN 3
WHEN DAB000.SalesRegion = 6 THEN 4
WHEN DAB000.SalesRegion = 5 THEN 5
ELSE 6 END, type DESC感谢@gordon-linoff在这方面的帮助!
结果如下所示:
MyYear SalesRegion type jan feb mar
2021 2 revenue 12345,00 12345,00 12345,00
2021 2 margin 12345,00 12345,00 12345,00
2021 1 revenue 12345,00 12345,00 12345,00
2021 1 margin 12345,00 12345,00 12345,00
2021 3 revenue 12345,00 12345,00 12345,00
2021 3 margin 12345,00 12345,00 12345,00
2021 4 revenue 12345,00 12345,00 12345,00使用这个案例,我手动强制对销售区域进行分组。2-1-3和4-6-5.
我想要的是,对于每个分组(2-1-3和4-6-5)是有一个小计行(S)。
如下所示:
MyYear SalesRegion type jan feb mar
2021 2 revenue 12345,00 12345,00 12345,00
2021 2 margin 12345,00 12345,00 12345,00
2021 1 revenue 12345,00 12345,00 12345,00
2021 1 margin 12345,00 12345,00 12345,00
2021 3 revenue 12345,00 12345,00 12345,00
2021 3 margin 12345,00 12345,00 12345,00
Subtotal 2-1-3 - revenue 12345,00 12345,00 12345,00
Subtotal 2-1-3 - margin 12345,00 12345,00 12345,00
2021 4 revenue 12345,00 12345,00 12345,00
.. and so on问题是,我使用Advantage DataBase,它没有透视,分组汇总,立方体等或任何其他有用的函数,我已经读到。
那么,有没有一种简单的方法可以将它添加到我当前的代码中,而不使用这样的函数呢?
发布于 2021-03-19 00:55:38
好的-谢谢。
所以我在你的原始问题中询问了这一行
问题是,我使用Advantage DataBase,它没有透视、分组汇总、多维数据集等,或者我读到的任何其他有用的函数。
我发送的链接描述了使用group by构建聚合
如果可能-取原始代码-将case语句移出order子句,以便在DAB000表的末尾创建一个新的计算列-并部署到视图中
第1步-将您的(细粒度)销售摘要部署到独立视图中
具有显示SalesRegionOrder首选项的附加列的
偏好
创建视图类型为SELECT年(DAB020.Date) as MyYear,DAB000.SalesRegion,DAB000.SalesRegion,DAB000.TYPE,SUM(CASE WHEN MONTH(DAB020.date) =1然后舍入(DAB020.VALUE) END) as jan,
SUM(CASE WHEN MONTH(DAB020.date) =2 THEN ROUND(DAB020.value) END)作为feb,SUM(CASE WHEN MONTH(DAB020.date) =3 THEN ROUND(DAB020.value) END) as mar (SELECT DAB020.* FROM ( SELECT ....)mysalesdata left join ( select *,CASE WHEN DAB000.SalesRegion =2 THEN 0...当DAB000.SalesRegion =5然后5,否则6作为SalesRegionOrder结束,来自"DF030000.DBF“mysalesdata.PERSNR上的DAB000 ) DAB000 = DAB000.KDNR按年分组(DAB020.date),DAB000.SalesRegion,DAB000.SalesRegionOrder,DAB020.type
第2步创建和维护新的定制表GroupRegions
元数据描述了您所需的确切报告级别
(为简洁起见,此处表示为JSON,仅用于说明)
{ GroupRegions
{GroupRegionsName :'2-1-3',
{SalesRegion : 2, GroupOrder : 0},
{SalesRegion : 1, GroupOrder : 1},
{SalesRegion : 3, GroupOrder : 2}},
{GroupRegionsName : '4',
{SalesRegion : 4, GroupOrder : 3},
{GroupRegionsName : '6',
{SalesRegion : 6, GroupOrder : 4},
{GroupRegionsName : '5',
{SalesRegion : 5, GroupOrder : 5}}}等。
步骤3 --在自己的视图中使用SalesAggregations
create view GroupedRegionSalesView as select RegionSalesView.Myyear,GroupRegions.GroupRegionName,LastRegionOrdered+0.1 as GroupOrder,RegionSalesView.type,sum(RegionSalesView.jan) as jan,sum(RegionSalesView.feb) as feb,sum(RegionSalesView.mar) as mar RegionSales inner join GroupRegions on GroupRegions.SalesRegion = RegionSalesView.SalesRegion inner join (select GroupRegionName,max(GroupOrder) as LastRegionOrdered from GroupRegions group by by GroupRegionName)排序人= group by,,)
第4步-将两者结合在一起
select RegionSalesView.Myyear
, cast(RegionSalesView.SalesRegion as SalesRegion)
, cast(GroupRegions.GroupOrder as float) as GroupRegions
, RegionSalesView.type
, RegionSalesView.jan
, RegionSalesView.feb
, RegionSalesView.mar
from RegionSalesView
union
select * from GroupedRegionSalesView
order by GroupOrder, typehttps://stackoverflow.com/questions/66693109
复制相似问题