日期:2014-05-18 浏览次数:20712 次
/* 有一个表test1 系统单号 单据状态 系统行号 单据编号 附加说明 日期 系统款号 款号 名称 系统颜色编号 系统尺码编号 颜色 尺码 数量 箱号 3 未审核 3 JHDD-2011-12-24-00001 2011-12-24 712 1002 牛仔裤 828 831 蓝色 170 1.00000000 3-3 3 未审核 3 JHDD-2011-12-24-00001 2011-12-24 712 1002 牛仔裤 828 832 蓝色 175 2.00000000 3-3 3 未审核 3 JHDD-2011-12-24-00001 2011-12-24 712 1002 牛仔裤 828 833 蓝色 180 3.00000000 3-3 3 未审核 3 JHDD-2011-12-24-00001 2011-12-24 712 1002 牛仔裤 828 840 蓝色 185 NULL 3-3 3 未审核 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 Test1 end GO CREATE 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] GO Insert 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 test1 go ------以下语句怎么改才能实现 动态合计数量? declare @s varchar(8000) set @s='' Select @s=@s+','+quotename([尺码])+'=max(case when [尺码]='+quotename([尺码],'''')+' then [数量] else null end)' from test1 group by [尺码] exec('select [单据状态],[系统单号],[系统行号],[系统款号],[款号],[名称],[系统颜色编号],[箱号],[颜色] '+@s+' from test1 group by [单据状态],[系统单号],[系统行号],[系统款号],[款号],[名称],[系统颜色编号],[箱号],[颜色]')
declare @s Nvarchar(4000) set @s='' Select @s=@s+','+quotename([尺码])+N'=max(case when [尺码]='+quotename([尺码],'''')+N' then [数量] else null end)' from test1 group by [尺码] exec(N'select [单据状态],[系统单号],[系统行号],[系统款号],[款号],[名称],[系统颜色编号],[箱号],[颜色] '+@s+N',sum([数量])[数量