在一个数据库中有一张表格式如下:编号   名称    数量    地址                 时间
1     AA-000   12     192.168.1.1         2010-10-21
2     AA-123   8     192.168.1.1         2010-10-21
3     AA-999   5     192.168.1.1         2010-10-21
4     BB-120   12    192.168.1.1         2010-10-21
5     BB-1540   3    192.168.1.1         2010-10-21
6     FF-421   6     192.168.1.1         2010-10-21
7     FF-110   7     192.168.1.1         2010-10-21
8     FF-119   9     192.168.1.1         2010-10-21
9     SM-120   20     192.168.1.1         2010-10-21
10    SM-126   15    192.168.1.1         2010-10-21
.....
现在俺想要将数据进行统计然后ASP输出到页面,统计的方式就是将 “名称” 这一列前两个字母相同的“数量”这一列进行相加 然后ASP输出来
请各大神帮帮看一下,本人菜菜
比如  ASP输出时就是如下:1   AA     26 
2   BB     15
...
因为名称这一列不是固定的内容有可能是任意字母的组合,所以俺实在想不到别的办法,俺用穷举法查找每一个可能存的组合慢得吓死人,一千条记得要五分钟才能找完
求各路大神帮忙

解决方案 »

  1.   

    通配符不好使。。group by语句不知道使用方法
      

  2.   

    ----------------------------------------------------------------
    -- Author  :fredrickhu(小F,向高手学习)
    -- Date    :2011-04-08 21:14:40
    -- Verstion:
    --      Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) 
    -- Jul  9 2008 14:43:34 
    -- Copyright (c) 1988-2008 Microsoft Corporation
    -- Enterprise Evaluation Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)
    --
    ----------------------------------------------------------------
    --> 测试数据:[tb]
    if object_id('[tb]') is not null drop table [tb]
    go 
    create table [tb]([编号] int,[名称] varchar(7),[数量] int,[地址] varchar(11),[时间] datetime)
    insert [tb]
    select 1,'AA-000',12,'192.168.1.1','2010-10-21' union all
    select 2,'AA-123',8,'192.168.1.1','2010-10-21' union all
    select 3,'AA-999',5,'192.168.1.1','2010-10-21' union all
    select 4,'BB-120',12,'192.168.1.1','2010-10-21' union all
    select 5,'BB-1540',3,'192.168.1.1','2010-10-21' union all
    select 6,'FF-421',6,'192.168.1.1','2010-10-21' union all
    select 7,'FF-110',7,'192.168.1.1','2010-10-21' union all
    select 8,'FF-119',9,'192.168.1.1','2010-10-21' union all
    select 9,'SM-120',20,'192.168.1.1','2010-10-21' union all
    select 10,'SM-126',15,'192.168.1.1','2010-10-21'
    --------------开始查询--------------------------
    select
      LEFT(名称,CHARINDEX('-',名称)-1),
      sum([数量])数量
    from
      tb
    group by
      LEFT(名称,CHARINDEX('-',名称)-1)
    ----------------结果----------------------------
    /*         数量
    ------- -----------
    AA      25
    BB      15
    FF      22
    SM      35(4 行受影响)*/
      

  3.   


    if object_id('Test1') is not null
    drop table Test1
    create table Test1--编号 名称 数量 地址 时间
    (
    编号 varchar(3),
    名称 varchar(15),
    数量 int,
    地址 varchar(15),
    时间 date
    )
    --插入测试数据 select * from test1
    insert into Test1
    select '1','AA-000',12,'192.168.1.1',CAST('2010-10-2' as DATE) union all --1 AA-000 12 192.168.1.1 2010-10-21
    select '2','AA-123',8,'192.168.1.1',CAST('2010-10-2' as DATE) union all --2 AA-123 8 192.168.1.1 2010-10-21
    select '3','AA-999',5,'192.168.1.1',CAST('2010-10-2' as DATE) union all 
    select '4','BB-120',12,'192.168.1.1',CAST('2010-10-2' as DATE) union all
    select '5','BB-1540',3,'192.168.1.1',CAST('2010-10-2' as DATE) union all
    select '6','FF-421',6,'192.168.1.1',CAST('2010-10-2' as DATE) union all
    select '7','FF-110',7,'192.168.1.1',CAST('2010-10-2' as DATE) union all
    select '8','FF-119',9,'192.168.1.1',CAST('2010-10-2' as DATE) union all
    select '9','SM-120',20,'192.168.1.1',CAST('2010-10-2' as DATE) union all
    select '10','SM-126',15,'192.168.1.1',CAST('2010-10-2' as DATE)--查询语句
    select SUBSTRING(名称,1,2) as 名称,SUM(数量) as 数量 from Test1 group by SUBSTRING(名称,1,2)
      

  4.   

    上面的查询结果,3G网速真慢擦AA 25
    BB 15
    FF 22
    SM 35
      

  5.   

    消息 536,级别 16,状态 5,第 1 行
    传递到 SUBSTRING 函数的长度参数无效。
      

  6.   

    多个表连接起来就可以了嘛字段一样UNION ALL
      

  7.   

    --SQL1:
    select
      LEFT(名称,2),
      sum([数量])数量
    from tb
    group by LEFT(名称,2)--SQL2:
    select
    LEFT(名称,case CHARINDEX('-',名称) when 0 then LEN(名称) else CHARINDEX('-',名称)-1 end),
    sum([数量])数量
    from tb
    group by LEFT(名称,case CHARINDEX('-',名称) when 0 then LEN(名称) else CHARINDEX('-',名称)-1 end)--SQL3:
    select
    LEFT(名称,case CHARINDEX('-',名称) when 0 then LEN(名称) else CHARINDEX('-',名称)-1 end),
    sum([数量])数量
    FROM
    (
    SELECT [名称], [数量] FROM TABLE1
    UNION ALL
    SELECT [名称1], [数量2] FROM TABLE2
    ) T
    group by LEFT(名称,case CHARINDEX('-',名称) when 0 then LEN(名称) else CHARINDEX('-',名称)-1 end)
      

  8.   

    select left(编号,2),sum(数量)
    from tb
    group by left(编号,2)