当前位置: 代码迷 >> Sql Server >> 怎么加合计
  详细解决方案

怎么加合计

热度:70   发布时间:2016-04-27 14:11:33.0
如何加合计?
SQL code
/*有一个表test1系统单号 单据状态 系统行号 单据编号 附加说明 日期 系统款号 款号 名称 系统颜色编号 系统尺码编号 颜色 尺码 数量 箱号3    未审核    3    JHDD-2011-12-24-00001        2011-12-24    712    1002    牛仔裤    828    831    蓝色    170    1.00000000    3-33    未审核    3    JHDD-2011-12-24-00001        2011-12-24    712    1002    牛仔裤    828    832    蓝色    175    2.00000000    3-33    未审核    3    JHDD-2011-12-24-00001        2011-12-24    712    1002    牛仔裤    828    833    蓝色    180    3.00000000    3-33    未审核    3    JHDD-2011-12-24-00001        2011-12-24    712    1002    牛仔裤    828    840    蓝色    185    NULL    3-33    未审核    3    JHDD-2011-12-24-00001        2011-12-24    712    1002    牛仔裤    828    841    蓝色    190    NULL    3-3写一个SQL要生成的查询为:单据状态 系统单号 系统行号 系统款号 款号  名称  系统颜色编号 箱号  颜色 合计数量   170            175           180            185     190未审核    3    3    712    1002    牛仔裤    828    3-3    蓝色 6        1.00000000       2.00000000      3.00000000    NULL    NULL尺码是动态变化的怎么写呀,动态 合计数量 不会呀,怎么弄?*/---建立测试环境(MSSQL2000)if  exists (select * from sysobjects where id = object_id(N'Test1') and OBJECTPROPERTY(id, N'IsUserTable') = 1)begin   drop table Test1endGOCREATE TABLE [test1] (    [系统单号] [int] NOT NULL ,    [单据状态] [varchar] (6) COLLATE Chinese_PRC_CI_AS NULL ,    [系统行号] [int] NULL ,    [单据编号] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,    [附加说明] [varchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,    [日期] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,    [系统款号] [int] NULL ,    [款号] [varchar] (60) COLLATE Chinese_PRC_CI_AS NULL ,    [名称] [varchar] (60) COLLATE Chinese_PRC_CI_AS NULL ,    [系统颜色编号] [int] NULL ,    [系统尺码编号] [int] NOT NULL ,    [颜色] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,    [尺码] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,    [数量] [numeric](20, 8) NULL ,    [箱号] [varchar] (8000) COLLATE Chinese_PRC_CI_AS NULL ) ON [PRIMARY]GOInsert test1 (系统单号,单据状态,系统行号,单据编号,附加说明,日期,系统款号,款号,名称,系统颜色编号,系统尺码编号,颜色,尺码,数量,箱号)  Values ( 3,'未审核',3,'JHDD-2011-12-24-00001','','2011-12-24',712,'1002','牛仔裤',828,831,'蓝色','170',1.00000000,'3-3')Insert test1 (系统单号,单据状态,系统行号,单据编号,附加说明,日期,系统款号,款号,名称,系统颜色编号,系统尺码编号,颜色,尺码,数量,箱号)  Values ( 3,'未审核',3,'JHDD-2011-12-24-00001','','2011-12-24',712,'1002','牛仔裤',828,832,'蓝色','175',2.00000000,'3-3')Insert test1 (系统单号,单据状态,系统行号,单据编号,附加说明,日期,系统款号,款号,名称,系统颜色编号,系统尺码编号,颜色,尺码,数量,箱号)  Values ( 3,'未审核',3,'JHDD-2011-12-24-00001','','2011-12-24',712,'1002','牛仔裤',828,833,'蓝色','180',3.00000000,'3-3')Insert test1 (系统单号,单据状态,系统行号,单据编号,附加说明,日期,系统款号,款号,名称,系统颜色编号,系统尺码编号,颜色,尺码,数量,箱号)  Values ( 3,'未审核',3,'JHDD-2011-12-24-00001','','2011-12-24',712,'1002','牛仔裤',828,840,'蓝色','185',NULL,'3-3')Insert test1 (系统单号,单据状态,系统行号,单据编号,附加说明,日期,系统款号,款号,名称,系统颜色编号,系统尺码编号,颜色,尺码,数量,箱号)  Values ( 3,'未审核',3,'JHDD-2011-12-24-00001','','2011-12-24',712,'1002','牛仔裤',828,841,'蓝色','190',NULL,'3-3')--Insert test1 (系统单号,单据状态,系统行号,单据编号,附加说明,日期,系统款号,款号,名称,系统颜色编号,系统尺码编号,颜色,尺码,数量,箱号)  Values ( 2,'未审核',2,'JHDD-2011-12-24-00001','','2011-12-24',711,'1001','上衣',828,851,'蓝色','XL',5.00000000,'2-2')select * from test1go------以下语句怎么改才能实现 动态合计数量?declare @s varchar(8000)set @s=''Select @[email protected]+','+quotename([尺码])+'=max(case when [尺码]='+quotename([尺码],'''')+' then [数量] else null end)'from test1 group by [尺码]exec('select [单据状态],[系统单号],[系统行号],[系统款号],[款号],[名称],[系统颜色编号],[箱号],[颜色] [email protected]+' from test1group by [单据状态],[系统单号],[系统行号],[系统款号],[款号],[名称],[系统颜色编号],[箱号],[颜色]')












------解决方案--------------------
SQL code
declare @s Nvarchar(4000)set @s=''Select @[email protected]+','+quotename([尺码])+N'=max(case when [尺码]='+quotename([尺码],'''')+N' then [数量] else null end)'from test1 group by [尺码]exec(N'select [单据状态],[系统单号],[系统行号],[系统款号],[款号],[名称],[系统颜色编号],[箱号],[颜色] [email protected]+N',sum([数量])[数量] from test1group by [单据状态],[系统单号],[系统行号],[系统款号],[款号],[名称],[系统颜色编号],[箱号],[颜色]')
  相关解决方案