将如下表中的数据做统计,
GroupID Name DoSage Unit OperatorDoc OperatorDate
第一组 75%酒精 2 4500 b 2011-12-17
第二组 甲醛 3 4500 b 2011-12-17
第一组 85%酒精 1 5000 b 2011-12-20
第一组 95%酒精 1 5000 b 2011-12-20
第一组 甲醛 2 5000 b 2011-12-20
第二组 盐酸 2 5000 b 2011-12-20
第二组 95%酒精 1 4500 23232 2011-12-28
第一组 二甲苯 1 4500 23233 2011-12-28
第三组 无水酒精 2 4500 3223 2011-12-28
第一组 无水酒精 11 5000 多大点事 2011-12-30
第一组 75%酒精 1 5000 当当 2011-12-30
显示出的效果如下:[Name] ValueCount [GroupID] Value OperatorDate OperatorDoc
75%酒精 14000
第一组 9000 2011-12-17 b
第一组 5000 2011-12-30 当当
85%酒精 5000
第一组 5000 2011-12-20 b
95%酒精 9500
第二组 4500 2011-12-28 23232
第一组 5000 2011-12-20 b其中下面表中的Value是上面表中的DoSage和Unit的乘机下面表中的ValueCount是value的和
GroupID Name DoSage Unit OperatorDoc OperatorDate
第一组 75%酒精 2 4500 b 2011-12-17
第二组 甲醛 3 4500 b 2011-12-17
第一组 85%酒精 1 5000 b 2011-12-20
第一组 95%酒精 1 5000 b 2011-12-20
第一组 甲醛 2 5000 b 2011-12-20
第二组 盐酸 2 5000 b 2011-12-20
第二组 95%酒精 1 4500 23232 2011-12-28
第一组 二甲苯 1 4500 23233 2011-12-28
第三组 无水酒精 2 4500 3223 2011-12-28
第一组 无水酒精 11 5000 多大点事 2011-12-30
第一组 75%酒精 1 5000 当当 2011-12-30
显示出的效果如下:[Name] ValueCount [GroupID] Value OperatorDate OperatorDoc
75%酒精 14000
第一组 9000 2011-12-17 b
第一组 5000 2011-12-30 当当
85%酒精 5000
第一组 5000 2011-12-20 b
95%酒精 9500
第二组 4500 2011-12-28 23232
第一组 5000 2011-12-20 b其中下面表中的Value是上面表中的DoSage和Unit的乘机下面表中的ValueCount是value的和
go
--> -->
if not object_id(N'Tempdb..#T1') is null
drop table #T1
Go
Create table #T1([GroupID] nvarchar(3),[Name] nvarchar(5),[DoSage] int,[Unit] int,[OperatorDoc] nvarchar(5),[OperatorDate] Datetime)
Insert #T1
select N'第一组',N'75%酒精',2,'4500',N'b','2011-12-17' union all
select N'第二组',N'甲醛',3,'4500',N'b','2011-12-17' union all
select N'第一组',N'85%酒精',1,'5000',N'b','2011-12-20' union all
select N'第一组',N'95%酒精',1,'5000',N'b','2011-12-20' union all
select N'第一组',N'甲醛',2,'5000',N'b','2011-12-20' union all
select N'第二组',N'盐酸',2,'5000',N'b','2011-12-20' union all
select N'第二组',N'95%酒精',1,'4500',N'23232','2011-12-28' union all
select N'第一组',N'二甲苯',1,'4500',N'23233','2011-12-28' union all
select N'第三组',N'无水酒精',2,'4500',N'3223','2011-12-28' union all
select N'第一组',N'无水酒精',11,'5000',N'多大点事','2011-12-30' union all
select N'第一组',N'75%酒精',1,'5000',N'当当','2011-12-30'
GoSELECT
[Name]=CASE WHEN a.row=1 THEN b.[Name] ELSE '' end,ValueCount=CASE WHEN a.row=1 THEN RTRIM(b.ValueCount) ELSE '' END ,a.Value,a.[OperatorDate],a.[OperatorDoc]
FROM
(Select ROW_NUMBER()OVER(PARTITION BY [Name] ORDER BY [OperatorDate]) AS row,[Name],[GroupID],[DoSage]*[Unit] AS Value,[OperatorDate]=CONVERT(VARCHAR(10),[OperatorDate],120),[OperatorDoc]
from #T1) AS a
INNER JOIN (SELECT [Name],SUM([DoSage]*[Unit]) AS ValueCount FROM #T1 GROUP BY Name) AS b ON a.Name=b.Name/*
Name ValueCount Value OperatorDate OperatorDoc
75%酒精 14000 9000 2011-12-17 b
5000 2011-12-30 当当
85%酒精 5000 5000 2011-12-20 b
95%酒精 9500 5000 2011-12-20 b
4500 2011-12-28 23232
二甲苯 4500 4500 2011-12-28 23233
甲醛 23500 13500 2011-12-17 b
10000 2011-12-20 b
无水酒精 64000 9000 2011-12-28 3223
55000 2011-12-30 多大点事
盐酸 10000 10000 2011-12-20 b
*/
[Name] ValueCount [GroupID] Value OperatorDate OperatorDoc
75%酒精 14000 (不要数据) (不要数据)
第一组 9000 2011-12-17 b
第一组 5000 2011-12-30 当当
85%酒精 5000 (不要数据) (不要数据)
第一组 5000 2011-12-20 b
95%酒精 9500 (不要数据) (不要数据)
第二组 4500 2011-12-28 23232
第一组 5000 2011-12-20 b
大侠差一点,我要的每组的第一行是只有Name ValueCount有数据,然后一行是具体的每次的分量
Create table #T1([GroupID] nvarchar(3),[Name] nvarchar(5),[DoSage] int,[Unit] int,[OperatorDoc] nvarchar(5),[OperatorDate] Datetime)
Insert #T1
select N'第一组',N'75%酒精',2,'4500',N'b','2011-12-17' union all
select N'第二组',N'甲醛',3,'4500',N'b','2011-12-17' union all
select N'第一组',N'85%酒精',1,'5000',N'b','2011-12-20' union all
select N'第一组',N'95%酒精',1,'5000',N'b','2011-12-20' union all
select N'第一组',N'甲醛',2,'5000',N'b','2011-12-20' union all
select N'第二组',N'盐酸',2,'5000',N'b','2011-12-20' union all
select N'第二组',N'95%酒精',1,'4500',N'23232','2011-12-28' union all
select N'第一组',N'二甲苯',1,'4500',N'23233','2011-12-28' union all
select N'第三组',N'无水酒精',2,'4500',N'3223','2011-12-28' union all
select N'第一组',N'无水酒精',11,'5000',N'多大点事','2011-12-30' union all
select N'第一组',N'75%酒精',1,'5000',N'当当','2011-12-30'
Go;with ach as
(
select [name],ltrim((select sum([DoSage]*[Unit]) from #t1 where [Name] = t.[Name])) as valuecount,
[GroupID],ltrim([DoSage]*[Unit]) as [value],
convert(varchar(10),[OperatorDate],120) [OperatorDate],[OperatorDoc],
rid=row_number() over (partition by [name] order by getdate())
from #t1 t
)select [name],valuecount,[GroupID],[value],[OperatorDate],[OperatorDoc] from(
select distinct [name],valuecount,'' [GroupID],'' [value],'' [OperatorDate],'' [OperatorDoc],rid,[name] nn from ach
union all
select '' [name],'' valuecount,[GroupID],[value],[OperatorDate],[OperatorDoc],rid,[name] nn from ach
) temp
order by nn,riddrop table #t1/*************************name valuecount GroupID value OperatorDate OperatorDoc
----- ------------ ------- ------------ ------------ -----------
75%酒精 14000
第一组 9000 2011-12-17 b
第一组 5000 2011-12-30 当当
75%酒精 14000
85%酒精 5000
第一组 5000 2011-12-20 b
第一组 5000 2011-12-20 b
95%酒精 9500
95%酒精 9500
第二组 4500 2011-12-28 23232
第一组 4500 2011-12-28 23233
二甲苯 4500
甲醛 23500
第一组 10000 2011-12-20 b
第二组 13500 2011-12-17 b
甲醛 23500
无水酒精 64000
第三组 9000 2011-12-28 3223
第一组 55000 2011-12-30 多大点事
无水酒精 64000
盐酸 10000
第二组 10000 2011-12-20 b(22 行受影响)
Create table #T1([GroupID] nvarchar(3),[Name] nvarchar(5),[DoSage] int,[Unit] int,[OperatorDoc] nvarchar(5),[OperatorDate] Datetime)
Insert #T1
select N'第一组',N'75%酒精',2,'4500',N'b','2011-12-17' union all
select N'第二组',N'甲醛',3,'4500',N'b','2011-12-17' union all
select N'第一组',N'85%酒精',1,'5000',N'b','2011-12-20' union all
select N'第一组',N'95%酒精',1,'5000',N'b','2011-12-20' union all
select N'第一组',N'甲醛',2,'5000',N'b','2011-12-20' union all
select N'第二组',N'盐酸',2,'5000',N'b','2011-12-20' union all
select N'第二组',N'95%酒精',1,'4500',N'23232','2011-12-28' union all
select N'第一组',N'二甲苯',1,'4500',N'23233','2011-12-28' union all
select N'第三组',N'无水酒精',2,'4500',N'3223','2011-12-28' union all
select N'第一组',N'无水酒精',11,'5000',N'多大点事','2011-12-30' union all
select N'第一组',N'75%酒精',1,'5000',N'当当','2011-12-30'
Go;with ach as
(
select [name],ltrim((select sum([DoSage]*[Unit]) from #t1 where [Name] = t.[Name])) as valuecount,
[GroupID],ltrim([DoSage]*[Unit]) as [value],
convert(varchar(10),[OperatorDate],120) [OperatorDate],[OperatorDoc],
rid=row_number() over (partition by [name] order by getdate())
from #t1 t
)select [name],valuecount,[GroupID],[value],[OperatorDate],[OperatorDoc] from(
select distinct [name],valuecount,'' [GroupID],'' [value],'' [OperatorDate],'' [OperatorDoc],1 as rid,[name] nn from ach
union all
select '' [name],'' valuecount,[GroupID],[value],[OperatorDate],[OperatorDoc],2,[name] nn from ach
) temp
order by nn,riddrop table #t1/***************************name valuecount GroupID value OperatorDate OperatorDoc
----- ------------ ------- ------------ ------------ -----------
75%酒精 14000
第一组 9000 2011-12-17 b
第一组 5000 2011-12-30 当当
85%酒精 5000
第一组 5000 2011-12-20 b
95%酒精 9500
第一组 5000 2011-12-20 b
第二组 4500 2011-12-28 23232
二甲苯 4500
第一组 4500 2011-12-28 23233
甲醛 23500
第一组 10000 2011-12-20 b
第二组 13500 2011-12-17 b
无水酒精 64000
第三组 9000 2011-12-28 3223
第一组 55000 2011-12-30 多大点事
盐酸 10000
第二组 10000 2011-12-20 b(18 行受影响)
go
--> -->
if not object_id(N'Tempdb..#T1') is null
drop table #T1
Go
Create table #T1([GroupID] nvarchar(3),[Name] nvarchar(5),[DoSage] int,[Unit] int,[OperatorDoc] nvarchar(5),[OperatorDate] Datetime)
Insert #T1
select N'第一组',N'75%酒精',2,'4500',N'b','2011-12-17' union all
select N'第二组',N'甲醛',3,'4500',N'b','2011-12-17' union all
select N'第一组',N'85%酒精',1,'5000',N'b','2011-12-20' union all
select N'第一组',N'95%酒精',1,'5000',N'b','2011-12-20' union all
select N'第一组',N'甲醛',2,'5000',N'b','2011-12-20' union all
select N'第二组',N'盐酸',2,'5000',N'b','2011-12-20' union all
select N'第二组',N'95%酒精',1,'4500',N'23232','2011-12-28' union all
select N'第一组',N'二甲苯',1,'4500',N'23233','2011-12-28' union all
select N'第三组',N'无水酒精',2,'4500',N'3223','2011-12-28' union all
select N'第一组',N'无水酒精',11,'5000',N'多大点事','2011-12-30' union all
select N'第一组',N'75%酒精',1,'5000',N'当当','2011-12-30'
GoSELECT
[Name]=CASE WHEN a.row=1 THEN b.[Name] ELSE '' end,ValueCount=CASE WHEN a.row=1 THEN RTRIM(b.ValueCount) ELSE '' END ,[GroupID],a.Value,a.[OperatorDate],a.[OperatorDoc]
FROM
(Select ROW_NUMBER()OVER(PARTITION BY [Name] ORDER BY [OperatorDate]) AS row,[Name],[GroupID],[DoSage]*[Unit] AS Value,[OperatorDate]=CONVERT(VARCHAR(10),[OperatorDate],120),[OperatorDoc]
from #T1) AS a
INNER JOIN (SELECT [Name],SUM([DoSage]*[Unit]) AS ValueCount FROM #T1 GROUP BY Name) AS b ON a.Name=b.Name
/*
Name ValueCount GroupID Value OperatorDate OperatorDoc
75%酒精 14000 第一组 9000 2011-12-17 b
第一组 5000 2011-12-30 当当
85%酒精 5000 第一组 5000 2011-12-20 b
95%酒精 9500 第一组 5000 2011-12-20 b
第二组 4500 2011-12-28 23232
二甲苯 4500 第一组 4500 2011-12-28 23233
甲醛 23500 第二组 13500 2011-12-17 b
第一组 10000 2011-12-20 b
无水酒精 64000 第三组 9000 2011-12-28 3223
第一组 55000 2011-12-30 多大点事
盐酸 10000 第二组 10000 2011-12-20 b
*/--還是
SELECT Name,ValueCount,GroupID,VALUE,OperatorDate,OperatorDoc
FROM (
SELECT [Name],RTRIM(SUM([DoSage]*[Unit])) AS ValueCount,[GroupID]='', VALUE='',[OperatorDate]='',[OperatorDoc]='',ord=1,[Name] AS Name2 FROM #T1 GROUP BY Name
UNION all
SELECT
[Name]='',ValueCount='',[GroupID],RTRIM([DoSage]*[Unit]) AS Value,[OperatorDate]=CONVERT(VARCHAR(10),[OperatorDate],120),[OperatorDoc],ord=2,[Name] AS Name2
from #T1
)t
ORDER BY [Name2],ord,[OperatorDate]/*
Name ValueCount GroupID VALUE OperatorDate OperatorDoc
75%酒精 14000
第一组 9000 2011-12-17 b
第一组 5000 2011-12-30 当当
85%酒精 5000
第一组 5000 2011-12-20 b
95%酒精 9500
第一组 5000 2011-12-20 b
第二组 4500 2011-12-28 23232
二甲苯 4500
第一组 4500 2011-12-28 23233
甲醛 23500
第二组 13500 2011-12-17 b
第一组 10000 2011-12-20 b
无水酒精 64000
第三组 9000 2011-12-28 3223
第一组 55000 2011-12-30 多大点事
盐酸 10000
第二组 10000 2011-12-20 b
*/