日期:2014-05-18 浏览次数:20845 次
/*
有一个表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([数量])[数量