日期:2014-05-18  浏览次数:20447 次

??? 简单SQL语句 ???
当 长度*宽度/1000000 得数小于1则进位到1,得数不小于1保留两位小数四舍五入,查询下面结果:
查询品名规则等于原品名后两字+装饰普通,其中有无边字段,如果为''或为'-'则为普通,其它为装饰;
如何写语句得到下面的结果。

单号 品名 长度 宽度 数量 有无边  
A001 甲A级 1200 815 20 有
A001 甲A级 1200 958 10 有
A001 甲B级 1300 1150 30 三边
A002 乙T级 1100 650 10 -
A002 乙T级 1100 1250 15  

单号 品名 长宽数量积  
A001 装饰A级 20+11.5=31.5 
A001 装饰B级 45 
A002 普通T级 10+20.7=30.7




------解决方案--------------------
SQL code

declare @t table 
(单号 varchar(4),品名 varchar(5),长度 int,宽度 int,数量 int,有无边 varchar(4))
insert into @t
select 'A001','甲A级',1200,815,20,'有' union all
select 'A001','甲A级',1200,958,10,'有' union all
select 'A001','甲B级',1300,1150,30,'三边' union all
select 'A002','乙T级',1100,650,10,'-' union all
select 'A002','乙T级',1100,1250,15,''

select 单号 ,
品名 =case when 有无边='-' or 有无边='' then '普通' else '装饰' end +right(品名,2),
长宽数量积=sum(case when 长度*宽度<1000000 then 1.00 else cast(长度*宽度/1000000.00 as decimal(18,2)) end)
from @t 
group by 单号 ,
right(品名,2),
case when 有无边='-' or 有无边='' then '普通' else '装饰' end
/*
单号   品名       长宽数量积
---- -------- ---------------------------------------
A001 装饰A级     2.15
A001 装饰B级     1.50
A002 普通T级     2.38
*/

------解决方案--------------------
探讨

SQL code

declare @t table
(单号 varchar(4),品名 varchar(5),长度 int,宽度 int,数量 int,有无边 varchar(4))
insert into @t
select 'A001','甲A级',1200,815,20,'有' union all
select 'A001','甲A级',1200,958,10,'有' union a……