首页 > 数据库技术 > 详细

SQLSERVER 使用 ROLLUP 汇总数据,实现分组统计,合计,小计

时间:2017-01-05 12:07:56      阅读:468      评论:0      收藏:0      [点我收藏+]

表结构:

/****** Object:  Table [dbo].[AnnualSalesSummary]    Script Date: 2017-1-5 11:07:02 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[AnnualSalesSummary](
    [assId] [nvarchar](38) NOT NULL,
    [SalesPeriod] [nvarchar](100) NULL,
    [CounterName] [nvarchar](50) NULL,
    [Season] [nvarchar](50) NULL,
    [SalesVolume] [int] NULL,
    [Turnover] [int] NULL,
    [NoneOtherAmount] [int] NULL,
    [MaoriAmount] [int] NULL,
    [TurnoverRatio] [decimal](18, 1) NULL,
    [NoneOtherRate] [decimal](18, 1) NULL,
    [MaoriRate] [decimal](18, 1) NULL,
 CONSTRAINT [PK_AnnualSalesSummary] PRIMARY KEY CLUSTERED 
(
    [assId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[AnnualSalesSummary] ADD  CONSTRAINT [DF_AnnualSalesSummary_assId]  DEFAULT (newid()) FOR [assId]
GO

EXEC sys.sp_addextendedproperty @name=NMS_Description, @value=N主键 , @level0type=NSCHEMA,@level0name=Ndbo, @level1type=NTABLE,@level1name=NAnnualSalesSummary, @level2type=NCOLUMN,@level2name=NassId
GO

EXEC sys.sp_addextendedproperty @name=NMS_Description, @value=N销售期间 , @level0type=NSCHEMA,@level0name=Ndbo, @level1type=NTABLE,@level1name=NAnnualSalesSummary, @level2type=NCOLUMN,@level2name=NSalesPeriod
GO

EXEC sys.sp_addextendedproperty @name=NMS_Description, @value=N专柜 , @level0type=NSCHEMA,@level0name=Ndbo, @level1type=NTABLE,@level1name=NAnnualSalesSummary, @level2type=NCOLUMN,@level2name=NCounterName
GO

EXEC sys.sp_addextendedproperty @name=NMS_Description, @value=N季节 , @level0type=NSCHEMA,@level0name=Ndbo, @level1type=NTABLE,@level1name=NAnnualSalesSummary, @level2type=NCOLUMN,@level2name=NSeason
GO

EXEC sys.sp_addextendedproperty @name=NMS_Description, @value=N销售量 , @level0type=NSCHEMA,@level0name=Ndbo, @level1type=NTABLE,@level1name=NAnnualSalesSummary, @level2type=NCOLUMN,@level2name=NSalesVolume
GO

EXEC sys.sp_addextendedproperty @name=NMS_Description, @value=N成交金额 , @level0type=NSCHEMA,@level0name=Ndbo, @level1type=NTABLE,@level1name=NAnnualSalesSummary, @level2type=NCOLUMN,@level2name=NTurnover
GO

EXEC sys.sp_addextendedproperty @name=NMS_Description, @value=N让利金额 , @level0type=NSCHEMA,@level0name=Ndbo, @level1type=NTABLE,@level1name=NAnnualSalesSummary, @level2type=NCOLUMN,@level2name=NNoneOtherAmount
GO

EXEC sys.sp_addextendedproperty @name=NMS_Description, @value=N毛利金额 , @level0type=NSCHEMA,@level0name=Ndbo, @level1type=NTABLE,@level1name=NAnnualSalesSummary, @level2type=NCOLUMN,@level2name=NMaoriAmount
GO

EXEC sys.sp_addextendedproperty @name=NMS_Description, @value=N成交金额占比 , @level0type=NSCHEMA,@level0name=Ndbo, @level1type=NTABLE,@level1name=NAnnualSalesSummary, @level2type=NCOLUMN,@level2name=NTurnoverRatio
GO

EXEC sys.sp_addextendedproperty @name=NMS_Description, @value=N让利率 , @level0type=NSCHEMA,@level0name=Ndbo, @level1type=NTABLE,@level1name=NAnnualSalesSummary, @level2type=NCOLUMN,@level2name=NNoneOtherRate
GO

EXEC sys.sp_addextendedproperty @name=NMS_Description, @value=N毛利率 , @level0type=NSCHEMA,@level0name=Ndbo, @level1type=NTABLE,@level1name=NAnnualSalesSummary, @level2type=NCOLUMN,@level2name=NMaoriRate
GO

 

测试数据:

insert into AnnualSalesSummary(assId, SalesPeriod, CounterName, Season, SalesVolume, Turnover, NoneOtherAmount, MaoriAmount, TurnoverRatio, NoneOtherRate, MaoriRate) values (10A5F365-A5E5-4046-A10D-9B282948FD7D, 2014-03/2015-02, 1.2男休闲, [C]秋, 22310, 1336453, 189831, 189831, 3.3, 6.2, 20.8)
insert into AnnualSalesSummary(assId, SalesPeriod, CounterName, Season, SalesVolume, Turnover, NoneOtherAmount, MaoriAmount, TurnoverRatio, NoneOtherRate, MaoriRate) values (1641D492-A90F-4BD2-BA2B-66B599DFB4B0, 2014-03/2015-02, 1.2男休闲, [B]夏, 108108, 7181409, 1663791, 1663791, 17.6, 9.4, 19.3)
insert into AnnualSalesSummary(assId, SalesPeriod, CounterName, Season, SalesVolume, Turnover, NoneOtherAmount, MaoriAmount, TurnoverRatio, NoneOtherRate, MaoriRate) values (22D91E10-42A0-49EF-9BE8-86CDF8E3DC04, 2014-03/2015-02, 1.2男休闲, [E]四季=春夏, 1, 5, 0, 0, 0, 0, 6.5)
insert into AnnualSalesSummary(assId, SalesPeriod, CounterName, Season, SalesVolume, Turnover, NoneOtherAmount, MaoriAmount, TurnoverRatio, NoneOtherRate, MaoriRate) values (481B8ACB-385C-4D2E-84A8-94C824CC7077, 2014-03/2015-02, 男正装, , 44620, 2672905, 379662, 379662, 6.6, 12.4, 41.7)
insert into AnnualSalesSummary(assId, SalesPeriod, CounterName, Season, SalesVolume, Turnover, NoneOtherAmount, MaoriAmount, TurnoverRatio, NoneOtherRate, MaoriRate) values (4EF5E514-7EB6-48B8-A38E-385096753A67, 2014-03/2015-02, 1.2男休闲, [H]冬2, 72180, 8014356, 2543257, 2543257, 19.6, 12, 17.9)
insert into AnnualSalesSummary(assId, SalesPeriod, CounterName, Season, SalesVolume, Turnover, NoneOtherAmount, MaoriAmount, TurnoverRatio, NoneOtherRate, MaoriRate) values (554D249D-7347-42F4-BF75-E0423584CABB, 2014-03/2015-02, 男正装, , 40189, 3768598, 686935, 686935, 9.2, 15.4, 38.7)
insert into AnnualSalesSummary(assId, SalesPeriod, CounterName, Season, SalesVolume, Turnover, NoneOtherAmount, MaoriAmount, TurnoverRatio, NoneOtherRate, MaoriRate) values (5A85A143-6D94-4C8D-A8A3-29742693EADF, 2014-03/2015-02, 男正装, , 68, 3835, 88, 88, 0, 2.2, -48.3)
insert into AnnualSalesSummary(assId, SalesPeriod, CounterName, Season, SalesVolume, Turnover, NoneOtherAmount, MaoriAmount, TurnoverRatio, NoneOtherRate, MaoriRate) values (952BAA0D-CAA2-4E4C-AB6B-593DF939309A, 2014-03/2015-02, 男正装, , 216216, 14362818, 3327581, 3327581, 35.2, 18.8, 38.6)
insert into AnnualSalesSummary(assId, SalesPeriod, CounterName, Season, SalesVolume, Turnover, NoneOtherAmount, MaoriAmount, TurnoverRatio, NoneOtherRate, MaoriRate) values (95CDEFF7-AE8B-47D5-AE53-ACC1B47B2090, 2014-03/2015-02, 男正装, 冬2, 144360, 16028712, 5086514, 5086514, 39.3, 24.1, 37.8)
insert into AnnualSalesSummary(assId, SalesPeriod, CounterName, Season, SalesVolume, Turnover, NoneOtherAmount, MaoriAmount, TurnoverRatio, NoneOtherRate, MaoriRate) values (A3500304-19EB-461E-8C05-9FBD9E3CCA68, 2014-03/2015-02, 1.2男休闲, [A]春, 20095, 1884299, 343468, 343468, 4.6, 7.7, 19.3)
insert into AnnualSalesSummary(assId, SalesPeriod, CounterName, Season, SalesVolume, Turnover, NoneOtherAmount, MaoriAmount, TurnoverRatio, NoneOtherRate, MaoriRate) values (DA9F269A-2439-4F1D-8995-2DD603FEF30D, 2014-03/2015-02, 1.2男休闲, [D]冬, 34, 1918, 44, 44, 0, 1.1, -24.1)
insert into AnnualSalesSummary(assId, SalesPeriod, CounterName, Season, SalesVolume, Turnover, NoneOtherAmount, MaoriAmount, TurnoverRatio, NoneOtherRate, MaoriRate) values (E2F5BC6B-5B84-4F80-AADB-317F83AD056E, 2014-03/2015-02, 男正装, 冬1, 48125, 3935104, 361488, 361488, 9.7, 8.4, 37.8)
insert into AnnualSalesSummary(assId, SalesPeriod, CounterName, Season, SalesVolume, Turnover, NoneOtherAmount, MaoriAmount, TurnoverRatio, NoneOtherRate, MaoriRate) values (ED2E55D0-B169-4F65-B89F-CC5E7F85169D, 2014-03/2015-02, 1.2男休闲, [G]冬1, 24063, 1967552, 180744, 180744, 4.8, 4.2, 18.9)
insert into AnnualSalesSummary(assId, SalesPeriod, CounterName, Season, SalesVolume, Turnover, NoneOtherAmount, MaoriAmount, TurnoverRatio, NoneOtherRate, MaoriRate) values (FB058C51-C21C-4AF5-AD80-3B8757CA50E7, 2014-03/2015-02, 男正装, 四季=春夏, 2, 10, 0, 0, 0, 0, 13)

原数据结构:

10A5F365-A5E5-4046-A10D-9B282948FD7D 2014-03/2015-02 1.2男休闲 [C]秋 22310 1336453 189831 189831 3.3 6.2 20.8
1641D492-A90F-4BD2-BA2B-66B599DFB4B0 2014-03/2015-02 1.2男休闲 [B]夏 108108 7181409 1663791 1663791 17.6 9.4 19.3
22D91E10-42A0-49EF-9BE8-86CDF8E3DC04 2014-03/2015-02 1.2男休闲 [E]四季=春夏 1 5 0 0 0.0 0.0 6.5
481B8ACB-385C-4D2E-84A8-94C824CC7077 2014-03/2015-02 男正装 44620 2672905 379662 379662 6.6 12.4 41.7
4EF5E514-7EB6-48B8-A38E-385096753A67 2014-03/2015-02 1.2男休闲 [H]冬2 72180 8014356 2543257 2543257 19.6 12.0 17.9
554D249D-7347-42F4-BF75-E0423584CABB 2014-03/2015-02 男正装 40189 3768598 686935 686935 9.2 15.4 38.7
5A85A143-6D94-4C8D-A8A3-29742693EADF 2014-03/2015-02 男正装 68 3835 88 88 0.0 2.2 -48.3
952BAA0D-CAA2-4E4C-AB6B-593DF939309A 2014-03/2015-02 男正装 216216 14362818 3327581 3327581 35.2 18.8 38.6
95CDEFF7-AE8B-47D5-AE53-ACC1B47B2090 2014-03/2015-02 男正装 冬2 144360 16028712 5086514 5086514 39.3 24.1 37.8
A3500304-19EB-461E-8C05-9FBD9E3CCA68 2014-03/2015-02 1.2男休闲 [A]春 20095 1884299 343468 343468 4.6 7.7 19.3
DA9F269A-2439-4F1D-8995-2DD603FEF30D 2014-03/2015-02 1.2男休闲 [D]冬 34 1918 44 44 0.0 1.1 -24.1
E2F5BC6B-5B84-4F80-AADB-317F83AD056E 2014-03/2015-02 男正装 冬1 48125 3935104 361488 361488 9.7 8.4 37.8
ED2E55D0-B169-4F65-B89F-CC5E7F85169D 2014-03/2015-02 1.2男休闲 [G]冬1 24063 1967552 180744 180744 4.8 4.2 18.9
FB058C51-C21C-4AF5-AD80-3B8757CA50E7 2014-03/2015-02 男正装 四季=春夏 2 10 0 0 0.0 0.0 13.0
NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL

 

分组小计、合计后的结果:

技术分享

实现SQL语句:

 SELECT  CASE WHEN GROUPING(SalesPeriod) =1 THEN 合计 ELSE SalesPeriod  END AS 销售期间 /*合计所放在哪个字段上*/
       ,CASE WHEN GROUPING(CounterName)=0 AND GROUPING(Season)=1 THEN 小计 ELSE CounterName END AS 专柜 /*小计所放在哪个字段上*/
       ,Season as 季节
       ,SUM(SalesVolume) as 销售
       ,SUM(Turnover) as 成交金额
       ,SUM(NoneOtherAmount) as 让利金额
       --,GROUPING(SalesPeriod) as SalesPeriod_G
       --,GROUPING(CounterName) as CounterName_G
       --,GROUPING(Season) as Season_G
from AnnualSalesSummary
group by CounterName,SalesPeriod,Season with rollup
having  GROUPING(SalesPeriod)=0 or GROUPING(CounterName)=1 or GROUPING(Season)=0
ORDER BY CounterName DESC

 

 

 

 

 

 

SQLSERVER 使用 ROLLUP 汇总数据,实现分组统计,合计,小计

原文:http://www.cnblogs.com/zengdingding/p/6251616.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!