求教高手!!
SNO      cname    gname    number
1 C女士 C供应商 2
2 L先生 E供应商 32
3 L先生 E供应商 4
4 H先生 A供应商 10
5 S女士 D供应商 34
6 C女士 E供应商 53
7 L先生 A供应商 12
9 H女士 I供应商 36在上面的销售视图中,列出客户购买哪个供应商的商品最多?要求用聚合函数!

解决方案 »

  1.   

    select top 1 gname from (select gname,sum(number) as number from tb  group by gname)t order by number desc
      

  2.   

    --------------------------------------------------------------------------
    --  Author : htl258(Tony)
    --  Date   : 2010-04-27 00:01:03
    --  Version:Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) 
    --          Jul  9 2008 14:43:34 
    --          Copyright (c) 1988-2008 Microsoft Corporation
    --          Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)
    --  Blog   : http://blog.csdn.net/htl258
    --------------------------------------------------------------------------
    --> 生成测试数据表:aIF NOT OBJECT_ID('[a]') IS NULL
    DROP TABLE [a]
    GO
    CREATE TABLE [a]([SNO] INT,[cname] NVARCHAR(10),[gname] NVARCHAR(10),[number] INT)
    INSERT [a]
    SELECT 1,N'C女士',N'C供应商',2 UNION ALL
    SELECT 2,N'L先生',N'E供应商',32 UNION ALL
    SELECT 3,N'L先生',N'E供应商',4 UNION ALL
    SELECT 4,N'H先生',N'A供应商',10 UNION ALL
    SELECT 5,N'S女士',N'D供应商',34 UNION ALL
    SELECT 6,N'C女士',N'E供应商',53 UNION ALL
    SELECT 7,N'L先生',N'A供应商',12 UNION ALL
    SELECT 9,N'H女士',N'I供应商',36
    GO
    --SELECT * FROM [a]-->SQL查询如下:
    select top 1 gname,sumqty=SUM(number)
    from a
    group by gname 
    order by SUM(number) desc
    /*
    gname      sumqty
    ---------- -----------
    E供应商       89(1 行受影响)*/
      

  3.   

    上面运行得到的结果不符合要求,根据题意,得到的结果应该是:
    C女士 E供应商 53
    L先生 E供应商 32
    H先生 A供应商 10
    S女士 D供应商 34
    H女士 I供应商 36
    这样的才对的!
    麻烦高手指教下!
      

  4.   

    --------------------------------------------------------------------------
    --  Author : htl258(Tony)
    --  Date   : 2010-04-27 00:01:03
    --  Version:Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) 
    --          Jul  9 2008 14:43:34 
    --          Copyright (c) 1988-2008 Microsoft Corporation
    --          Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)
    --  Blog   : http://blog.csdn.net/htl258
    --------------------------------------------------------------------------
    --> 生成测试数据表:aIF NOT OBJECT_ID('[a]') IS NULL
        DROP TABLE [a]
    GO
    CREATE TABLE [a]([SNO] INT,[cname] NVARCHAR(10),[gname] NVARCHAR(10),[number] INT)
    INSERT [a]
    SELECT 1,N'C女士',N'C供应商',2 UNION ALL
    SELECT 2,N'L先生',N'E供应商',32 UNION ALL
    SELECT 3,N'L先生',N'E供应商',4 UNION ALL
    SELECT 4,N'H先生',N'A供应商',10 UNION ALL
    SELECT 5,N'S女士',N'D供应商',34 UNION ALL
    SELECT 6,N'C女士',N'E供应商',53 UNION ALL
    SELECT 7,N'L先生',N'A供应商',12 UNION ALL
    SELECT 9,N'H女士',N'I供应商',36
    GO
    --SELECT * FROM [a]
    SELECT [cname],gname,number FROM A T WHERE [number]=(SELECT MAX(NUMBER) FROM A WHERE cname=T.cname)
    /*
    cname      gname      number
    ---------- ---------- -----------
    S女士        D供应商       34
    L先生        E供应商       32
    H先生        A供应商       10
    H女士        I供应商       36
    C女士        E供应商       53(5 行受影响)
    */
      

  5.   

    不好意思,上面的引用有错,应该是这个,呵呵,谢谢tony!!
      

  6.   

    CREATE TABLE [a]([SNO] INT,[cname] NVARCHAR(10),[gname] NVARCHAR(10),[number] INT)
    INSERT [a]
    SELECT 1,N'C女士',N'C供应商',2 UNION ALL
    SELECT 2,N'L先生',N'E供应商',32 UNION ALL
    SELECT 3,N'L先生',N'E供应商',4 UNION ALL
    SELECT 4,N'H先生',N'A供应商',10 UNION ALL
    SELECT 5,N'S女士',N'D供应商',34 UNION ALL
    SELECT 6,N'C女士',N'E供应商',53 UNION ALL
    SELECT 7,N'L先生',N'A供应商',12 UNION ALL
    SELECT 9,N'H女士',N'I供应商',36
    goselect m.* from 

      select cname , gname , sum(number) number from a group by cname , gname
    ) m 
    where not exists (select 1 from 
    (
      select cname , gname , sum(number) number from a group by cname , gname
    ) n where n.cname = m.cname and number > m.number)
    order by m.cnameselect m.* from 

      select cname , gname , sum(number) number from a group by cname , gname
    ) m 
    where number = (select max(number) from 
    (
      select cname , gname , sum(number) number from a group by cname , gname
    ) n where n.cname = m.cname )
    order by m.cnamedrop table a/*
    cname      gname      number      
    ---------- ---------- ----------- 
    C女士        E供应商       53
    H女士        I供应商       36
    H先生        A供应商       10
    L先生        E供应商       36
    S女士        D供应商       34(所影响的行数为 5 行)cname      gname      number      
    ---------- ---------- ----------- 
    C女士        E供应商       53
    H女士        I供应商       36
    H先生        A供应商       10
    L先生        E供应商       36
    S女士        D供应商       34(所影响的行数为 5 行)*/
      

  7.   

    “SELECT [cname],gname,number FROM A T WHERE [number]=(SELECT MAX(NUMBER) FROM A WHERE cname=T.cname)

    请问一下上面语句中的“A”“T”是代表两个不同的表吗?