我有一表数据如下
id   名称    数量     单价    金额   供货商
1    笔记本   5       5.00    25.00   A商
2    笔记本   10      5.00    50.00   B商
3    笔记本   5       5.50    27.50   A商
4    笔记本   5       5.50    27.50   B商
5    铅笔     10      2.00    20.00   A商
6    铅笔     15      2.00    30.00   B商
7    铅笔     15      2.20    33.00   A商
8    铅笔     15      2.20    30.00   B商
9    笔记本   5       5.00    25.00   A商
10   笔记本   10      5.00    50.00   B商
11   笔记本   5       5.50    27.50   A商
12   笔记本   5       5.50    27.50   B商
13   铅笔     10      2.00    20.00   A商
14   铅笔     15      2.00    30.00   B商
15   铅笔     15      2.20    33.00   A商
16   铅笔     15      2.20    30.00   B商
...
求SQL语句
得第二表
供货商     名称    单价   数量    总价
A商        笔记本  5.00    10     50.00
           笔记本  5.50    20    100.00
           铅笔    2.00    20     40.00
           铅笔    2.20    30     66.00
B商        笔记本  5.00    20    100.00
           笔记本  5.50    10     55.00
           铅笔    2.00    30     60.00
           铅笔    2.20    30     66.00
......
合计                                ?
按供货商,名称,单价(递增)求数量和 总价 还有合计        

解决方案 »

  1.   

    ----------------------------------------------------------------
    -- Author  :SQL77(只为思齐老)
    -- Date    :2010-01-29 13:44:19
    -- Version:
    --      Microsoft SQL Server  2000 - 8.00.194 (Intel X86) 
    -- Aug  6 2000 00:57:48 
    -- Copyright (c) 1988-2000 Microsoft Corporation
    -- Desktop Engine on Windows NT 5.1 (Build 2600: Service Pack 3)
    --
    ----------------------------------------------------------------
    --> 测试数据:#TB
    if object_id('tempdb.dbo.#TB') is not null drop table #TB
    go 
    create table #TB([id] int,[名称] varchar(6),[数量] int,[单价] numeric(3,2),[金额] numeric(4,2),[供货商] varchar(3))
    insert #TB
    select 1,'笔记本',5,5.00,25.00,'A商' union all
    select 2,'笔记本',10,5.00,50.00,'B商' union all
    select 3,'笔记本',5,5.50,27.50,'A商' union all
    select 4,'笔记本',5,5.50,27.50,'B商' union all
    select 5,'铅笔',10,2.00,20.00,'A商' union all
    select 6,'铅笔',15,2.00,30.00,'B商' union all
    select 7,'铅笔',15,2.20,33.00,'A商' union all
    select 8,'铅笔',15,2.20,30.00,'B商' union all
    select 9,'笔记本',5,5.00,25.00,'A商' union all
    select 10,'笔记本',10,5.00,50.00,'B商' union all
    select 11,'笔记本',5,5.50,27.50,'A商' union all
    select 12,'笔记本',5,5.50,27.50,'B商' union all
    select 13,'铅笔',10,2.00,20.00,'A商' union all
    select 14,'铅笔',15,2.00,30.00,'B商' union all
    select 15,'铅笔',15,2.20,33.00,'A商' union all
    select 16,'铅笔',15,2.20,30.00,'B商'
    --------------开始查询--------------------------select 供货商,名称,单价,SUM(数量)数量,SUM(金额)金额 from #TB GROUP BY 供货商,名称,单价
    ----------------结果----------------------------
    /* (所影响的行数为 16 行)供货商  名称     单价    数量          金额                                       
    ---- ------ ----- ----------- ---------------------------------------- 
    A商   笔记本    5.00  10          50.00
    A商   笔记本    5.50  10          55.00
    A商   铅笔     2.00  20          40.00
    A商   铅笔     2.20  30          66.00
    B商   笔记本    5.00  20          100.00
    B商   笔记本    5.50  10          55.00
    B商   铅笔     2.00  30          60.00
    B商   铅笔     2.20  30          60.00(所影响的行数为 8 行)
    */
      

  2.   

    select 供货商,名称,单价,数量,单价*数量 as 总价 from table order by 单价 desc
      

  3.   

    用group  by   供货商
      

  4.   

    ----------------------------------------------------------------
    -- Author  :fredrickhu(我是小F,向高手学习)
    -- Date    :2010-01-29 13:52:01
    -- Version:
    --      Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) 
    -- Nov 24 2008 13:01:59 
    -- Copyright (c) 1988-2005 Microsoft Corporation
    -- Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
    --
    ----------------------------------------------------------------
    --> 测试数据:[tb]
    if object_id('[tb]') is not null drop table [tb]
    go 
    create table [tb]([id] int,[名称] varchar(6),[数量] int,[单价] numeric(3,2),[金额] numeric(4,2),[供货商] varchar(3))
    insert [tb]
    select 1,'笔记本',5,5.00,25.00,'A商' union all
    select 2,'笔记本',10,5.00,50.00,'B商' union all
    select 3,'笔记本',5,5.50,27.50,'A商' union all
    select 4,'笔记本',5,5.50,27.50,'B商' union all
    select 5,'铅笔',10,2.00,20.00,'A商' union all
    select 6,'铅笔',15,2.00,30.00,'B商' union all
    select 7,'铅笔',15,2.20,33.00,'A商' union all
    select 8,'铅笔',15,2.20,30.00,'B商' union all
    select 9,'笔记本',5,5.00,25.00,'A商' union all
    select 10,'笔记本',10,5.00,50.00,'B商' union all
    select 11,'笔记本',5,5.50,27.50,'A商' union all
    select 12,'笔记本',5,5.50,27.50,'B商' union all
    select 13,'铅笔',10,2.00,20.00,'A商' union all
    select 14,'铅笔',15,2.00,30.00,'B商' union all
    select 15,'铅笔',15,2.20,33.00,'A商' union all
    select 16,'铅笔',15,2.20,30.00,'B商'
    --------------开始查询--------------------------
    ;with f as
    (
    select 供货商,名称,单价,sum(数量) as 数量,sum(金额) as 金额 from tb group by 供货商,名称,单价
    )
    select
      case id when 1 then 供货商 else '' end as 供货商,名称,单价,数量,金额
    from
     (select id=row_number()over(partition by 供货商 order by getdate()),* from f)t
    ----------------结果----------------------------
    /* 供货商  名称     单价                                      数量          金额
    ---- ------ --------------------------------------- ----------- ---------------------------------------
    A商   笔记本    5.00                                    10          50.00
         笔记本    5.50                                    10          55.00
         铅笔     2.00                                    20          40.00
         铅笔     2.20                                    30          66.00
    B商   笔记本    5.00                                    20          100.00
         笔记本    5.50                                    10          55.00
         铅笔     2.00                                    30          60.00
         铅笔     2.20                                    30          60.00(8 行受影响)
    */
      

  5.   

    select  供货商,名称,单价,sum(数量) AS 数量,sum(金额) AS 总计 from #tb group by 供货商,名称,单价
      

  6.   

    declare @a table(id INT,  mc varchar(20),sl int,dj DECIMAL(20,2),je DECIMAL(20,2),ghs varchar(20))
    insert @a select 1    ,'笔记本',  5,      5.00 ,   25.00  ,'A商' 
    union all select 2    ,'笔记本',  10 ,     5.00,    50.00  ,'B商' 
    union all select 3    ,'笔记本',  5  ,    5.50 ,   27.50  ,'A商' 
    union all select 4    ,'笔记本',  5  ,    5.50 ,   27.50  ,'B商' 
    union all select 5    ,'铅笔',    10 ,     2.00,    20.00  ,'A商' 
    union all select 6    ,'铅笔',    15 ,     2.00,    30.00  ,'B商' 
    union all select 7    ,'铅笔',    15 ,     2.20,    33.00  ,'A商' 
    union all select 8    ,'铅笔',    15,      2.20,    30.00  ,'B商' 
    union all select 9    ,'笔记本',  5,      5.00 ,   25.00  ,'A商' 
    union all select 10  ,'笔记本',  10,      5.00 ,   50.00  ,'B商' 
    union all select 11  ,'笔记本',  5 ,     5.50  ,  27.50  ,'A商' 
    union all select 12  ,'笔记本',  5 ,     5.50  ,  27.50  ,'B商' 
    union all select 13  ,'铅笔',    10,      2.00 ,   20.00  ,'A商' 
    union all select 14  ,'铅笔',    15,      2.00 ,   30.00  ,'B商' 
    union all select 15  ,'铅笔',    15,      2.20 ,   33.00  ,'A商' 
    union all select 16  ,'铅笔',    15,      2.20 ,   30.00  ,'B商' SELECT case when ghs IS NULL THEN '总计' else ghs end ghs,mc,dj,sl,zj INTO # FROM 
    (
    SELECT ghs,mc,dj,sum(sl) sl,sum(dj*sl) zj 
    FROM @a
    GROUP BY ghs,mc,dj
    WITH ROLLUP 
    )aa
    WHERE ghs IS NULL AND mc IS NULL AND dj IS NULL 
    OR ghs IS NOT NULL AND mc IS NOT NULL AND dj IS NOT NULL SELECT CASE WHEN CHECKSUM(*)=(SELECT top 1 CHECKSUM(*) FROM # WHERE ghs=a.ghs) THEN ghs ELSE '' END ghs, 
     mc,dj,sl,zj FROM # aDROP TABLE #--result
    /*ghs                  mc                   dj                     sl          zj                             
    -------------------- -------------------- ---------------------- ----------- ------------------------------ 
    A商                   笔记本                  5.00                   10          50.00
                         笔记本                  5.50                   10          55.00
                         铅笔                   2.00                   20          40.00
                         铅笔                   2.20                   30          66.00
    B商                   笔记本                  5.00                   20          100.00
                         笔记本                  5.50                   10          55.00
                         铅笔                   2.00                   30          60.00
                         铅笔                   2.20                   30          66.00
    总计                   NULL                 NULL                   160         492.00(所影响的行数为 9 行)*/