在一个数据库中有一张表格式如下:编号 名称 数量 地址 时间
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 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
...
因为名称这一列不是固定的内容有可能是任意字母的组合,所以俺实在想不到别的办法,俺用穷举法查找每一个可能存的组合慢得吓死人,一千条记得要五分钟才能找完
求各路大神帮忙
-- 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 行受影响)*/
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)
BB 15
FF 22
SM 35
传递到 SUBSTRING 函数的长度参数无效。
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)
from tb
group by left(编号,2)