sql学习笔记(乘除法、查询结果分别显示即case和union函数用法)

sql乘除法:

SELECT
c.description AS crewname ,
wo.worktype AS worktype ,
conn.con AS con,
conwc.conw AS conwc,
cast(ROUND(COALESCE(cast(conwc.conw as decimal(12,2)),2)/conn.con*100,0) as decimal(12,2)) as q,
qx.qxnum AS qxnum ,
qxd.dqxnum AS dqxnum,
wo.siteid AS siteid,
to_char(wo.SCHEDSTART,'YYYY-MM-DD') AS SCHEDSTAR,
g.description AS sitename
FROM

1)如果是int之类的数据做计算,先转成decimal或者double类型,这样在计算结果为小数0点多的时候就不会只是显示0了
2)cast就是类型转换函数
3)round就不用多说了吧
4)COALESCE函数是当数据为null的时候的处理函数,比如a的数据为null,则:
coalesce(a,0) -------- 当a为null时候设置其为0
coalesce(a,1) -------- 当a为null时候设置其为1


5)to_char可以说是截取的函数,也可以说是时间的格式化函数

sql查询结果分别显示(即case和union函数的用法):

select crewid ,count(1) as con from workorder where worktype='PMDXJ' group by crewid;

select crewid ,count(1) as conw from workorder where worktype='PMDXJ' and status='完成' group by crewid;

第一句sql是查询计划任务工单数,即所有工单数

第二句sql是查询已完成的工单数

需求:合并上面两个sql的查询结果,使之在一个查询结果中分别显示

方法一:

select crewid,count(wonum) as conw,1 as mytype from workorder where worktype='PMDXJ' group by crewid
union all
select crewid,count(wonum) as conw,2 as mytype from workorder where worktype='PMDXJ' and status='完成' group by crewid;

此查询的结果中mytype为1的是计划任务工单数,mytype为2的是完成的工单数

方法二:

select crewid,sum(case when status ='完成' then 1 else 0 end) wc ,count(1) jh from workorder where worktype='PMDXJ' group by crewid;

此查询需要注意的是对完成工单的数量统计不能用count函数,因为只要出现的记录都会被count函数统计到,不管你是1还是0,所以此处通过合计标识为1的和来达到统计完成的工单的数量

posted on 2017-02-04 14:52  binTke  阅读(545)  评论(0编辑  收藏  举报

导航