求个简单的处理 ~................................................................................................................
产品表
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 产品表