将如下表中的数据做统计,
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的和

解决方案 »

  1.   

    use Tempdb
    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
    */
      

  2.   


    [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有数据,然后一行是具体的每次的分量
      

  3.   


    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 行受影响)
      

  4.   


    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 行受影响)
      

  5.   

    use Tempdb
    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
    */