首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求个简单的处理 ~该怎么处理

2012-02-29 
求个简单的处理 ~...................................................................................

求个简单的处理 ~................................................................................................................
产品表

ID   产品分类   产品小类   产品名称     产品价格.................
1       金属         冶金产品         XXX           685......
2       金属         冶金产品         AAA           880   .....
3       医疗         手术设备       EEE             990....
4       金属         机械车床         DDD           1580.......
5       医疗         检查设备       FFF             358........
6       医疗         药品类           RRR             优质   ....
。。。。。。。。。。。。。。。。。。。。。。。。。。

现在要得出
产品分类     产品小类         总数       平均值   最高价     大于800   500-800   100-500   小于100
金属             冶金产品           2           .......     880             1个       1个             0个           0个
金属             机械车床           1           ......       1580           1个       0                 0               0
医疗             手术设备           1             .....       990             1个       0                 0               0
医疗               药品类             1             (无)     (无)       1个       0                 0               0

现在有可能一个产品价格不是数字,而是中文,所以不会处理。。。

优质       普通       一般           较差
对应
大于800   500-800   100-500   小于100

如果价格是汉字表示,那么平均值和最高价都是用(无来代替)
我已经用group   by实现了数字。。。但是汉字就没发处理了,希望大家帮忙

[解决办法]
create table 产品表
(
ID int,
产品分类 varchar(10),
产品小类 varchar(10),
产品名称 varchar(10),
产品价格 varchar(10)
)


insert 产品表 select 1, '金属 ', '冶金产品 ', 'XXX ', '685 '
insert 产品表 select 2, '金属 ', '冶金产品 ', 'AAA ', '880 '
insert 产品表 select 3, '医疗 ', '手术设备 ', 'EEE ', '990 '
insert 产品表 select 4, '金属 ', '机械车床 ', 'DDD ', '1580 '
insert 产品表 select 5, '医疗 ', '检查设备 ', 'FFF ', '358 '
insert 产品表 select 6, '医疗 ', '药品类 ', 'RRR ', '优质 '

select T1.产品分类,T1.产品小类,T1.总数,T2.平均值,T2.最高价,T1.大于800,T1.[500-800],T1.[100-500],T1.小于100


from
(
select 产品分类,产品小类,
count(1) as 总数,
sum(case when (产品价格= '优质 ') or (cast(产品价格 as int)> =800) then 1 else 0 end) as '大于800 ',
sum(case when (产品价格= '优质 ') or (cast(产品价格 as int)> =500 and cast(产品价格 as int) <800) then 1 else 0 end) as '500-800 ',
sum(case when (产品价格= '优质 ') or (cast(产品价格 as int)> =100 and cast(产品价格 as int) <500) then 1 else 0 end) as '100-500 ',
sum(case when (产品价格= '优质 ') or (cast(产品价格 as int) <100) then 1 else 0 end) as '小于100 '
From 产品表
group by 产品分类,产品小类
) T1 left join
(
select 产品分类,产品小类,avg(cast(产品价格 as int)) as 平均值,Max(cast(产品价格 as int)) as 最高价
From 产品表
Where IsNumeric(产品价格) = 1
group by 产品分类,产品小类
) T2 on T1.产品分类=T2.产品分类 and T1.产品小类=T2.产品小类
[解决办法]
--借用樓上的數據,LZ試試看吧

create table 产品表
(
ID int,
产品分类 varchar(10),
产品小类 varchar(10),
产品名称 varchar(10),
产品价格 varchar(10)
)


insert 产品表 select 1, '金属 ', '冶金产品 ', 'XXX ', '685 '
insert 产品表 select 2, '金属 ', '冶金产品 ', 'AAA ', '880 '
insert 产品表 select 3, '医疗 ', '手术设备 ', 'EEE ', '990 '
insert 产品表 select 4, '金属 ', '机械车床 ', 'DDD ', '1580 '
insert 产品表 select 5, '医疗 ', '检查设备 ', 'FFF ', '358 '
insert 产品表 select 6, '医疗 ', '药品类 ', 'RRR ', '优质 '
go
select T1.产品分类,T1.产品小类,T1.总数,isnull(T2.平均值, '无 ') as 平均值,isnull(T2.最高价, '无 ') as 最高价,T1.大于800,T1.[500-800],T1.[100-500],T1.小于100
from
(
select 产品分类,产品小类,
count(1) as 总数,
sum(case when (产品价格= '优质 ') or (IsNumeric(产品价格)=1 and cast(产品价格 as int)> =800) then 1 else 0 end) as '大于800 ',
sum(case when (产品价格= '普通 ') or (IsNumeric(产品价格)=1 and cast(产品价格 as int)> =500 and cast(产品价格 as int) <800) then 1 else 0 end) as '500-800 ',
sum(case when (产品价格= '一般 ') or (IsNumeric(产品价格)=1 and cast(产品价格 as int)> =100 and cast(产品价格 as int) <500) then 1 else 0 end) as '100-500 ',
sum(case when (产品价格= '较差 ') or (IsNumeric(产品价格)=1 and cast(产品价格 as int) <100) then 1 else 0 end) as '小于100 '
From 产品表
group by 产品分类,产品小类
) T1 left join
(
select 产品分类,产品小类,cast(avg(cast(产品价格 as int)) as varchar(10)) as 平均值,cast(Max(cast(产品价格 as int)) as varchar(10)) as 最高价
From 产品表
Where IsNumeric(产品价格) = 1
group by 产品分类,产品小类
) T2 on T1.产品分类=T2.产品分类 and T1.产品小类=T2.产品小类
go
drop table 产品表

热点排行