1.sql语句中多加一列不是自己表中的语法:eg: select sname,grade,deptid, 可用数量 = case deptid when 2 then 20 else grade end /**这个可用数量就是用户自己添加上去的与表无关的列**/ from test_groupby
2.取出某一类中的最大数据例如: 表:dept deptid sal name 01 2000 jack 01 300 tom 02 4000 lucy 02 5000 hual要得到以下结果,请写出sql: deptid sal name 01 2000 jack 02 5000 hualsql: select t1.* from dept t1 where sal = (select max(sal) from dept t2 where t1.name = t2.name)上面的sql就能得出取出某一类种的最大数据了
3.进行分类小计和总计(sql实现),(实际上这里我们可以考虑在添加一列,专门用来排序)eg:create table [tb]([客户编码] varchar(10),[客户名称] varchar(10),[数量] int)insert [tb]select '001','天达',2 union allselect '001','天达',3 union allselect '001','天达',4 union allselect '002','宏达',1 union allselect '002','宏达',2---------------上面是创建表和插入数据---------------------------------------下面是查询结果的sql---------------select * from(select * from tbunion all select 客户编码 = 客户编码+'小计' , 客户名称 = '小计' , sum(数量) 数量 from tb group by 客户编码union allselect 客户编码 = '', 客户名称 = '合计' , sum(数量) 数量 from tb) torder by case 客户编码 when '' then 2 else 1 end , 客户编码 , case 客户名称 when '小计' then 2 else 1 end
结果为:客户编码 客户名称 数量001 天达 2001 天达 3001 天达 4001小计 小计 9002 宏达 1002 宏达 2002小计 小计 3 合计 12
加了一列来实现的方法:
eg:
select * from
(
select sortno=客户编码+'',客户编码,客户名称,数量 from tb
union all
select sortno=客户编码+'sum',客户编码 = 客户编码+'小计' , 客户名称 = '小计' , sum(数量) 数量 from tb group by 客户编码
union all
select sortno='zzzzz',客户编码 = '', 客户名称 = '合计' , sum(数量) 数量 from tb
) t
order by sortno
结果为:
001 001 天达 2
001 001 天达 3
001 001 天达 4
001sum 001小计 小计 9
002 002 宏达 1
002 002 宏达 2
002sum 002小计 小计 3
zzzzz 合计 12
4.从外界接受一个参数param,如果param=''的话,则将全部的值都查出来,如果不为空的话,则将符合param的值的所有记录查找出来
eg:
select * from test_groupby where param='' or (param<>'' and sname=param)
上面的语句相当于三元表达式:
param == '' ? '' : sname=param
上面的方法就可以实现了