sql 点滴

select * from  (
select f.VA_YYYY||'年名次' va_yyyy, f.COMPANY_NAME ,row_number() over(partition by f.VA_YYYY order by cast(score as decimal(10,3)) desc ) rn from dcdw.fact_mbgkpmb f
) where company_name = '${company}'

在用到排名函数时,需要注意两点:

  1)、order by 的字段的数据类型,如果是字符串类型,那么就应该进行数据类型的转换,否则按照字符串,99是小于101的

  2)、order by 后面注意是否要加desc,像成绩这种的排名,成绩越高,排名越靠前,所以要加desc,有的则不需要,比如生产成本占销售比重,数值越小排名越靠前

删除重复数据:
DELETE FROM (SELECT id,NAME,row_number() over(PARTITION BY ID,NAME ORDER BY ID,NAME) AS row_num FROM TB_01) A
WHERE A.row_num>1;
 

DB2 Error : SQLCODE=-802,SQLSTATE=22003 异常原因

sql语句中CASE WHEN (yczycw_tb316.fd_108)=0 THEN 0 ELSE round(yczycw_tb316.fd_223*10000/yczycw_tb316.fd_108,0) end as FD_013 报错,原因为数据相乘后,超过了

数字的最大值,所以修改表达方式为CASE WHEN (yczycw_tb316.fd_108)=0 THEN 0 ELSE round(1.0000*yczycw_tb316.fd_223/yczycw_tb316.fd_108,4)*10000 end as FD_013 后问题解决,注意yczycw_tb316.fd_223先乘以浮点数1.0000后变成浮点数再进行相除,不然结果依旧是整数

 

select 
case 
    when f.I_MONTH<10 then  replace(char(f.I_YEAR)||'0'||char(f.I_MONTH),' ','')
    else  replace(char(f.I_YEAR)||char(f.I_MONTH),' ','') 
    end as YEARMONTH,
f.ENT_CODE ORG_CODE,
f.ENT_NAME ORG_NAME,
decode(replace(f.KPI_NAME,' ',''),'其中:应交税金合计',f.BQ_YEAR_VALUES,0 ) BQ_YJSDSHJ,
decode(replace(f.KPI_NAME,' ',''),'其中:应交税金合计',f.TQ_YEAR_VALUES,0) TQ_YJSDSHJ,
decode(replace(f.KPI_NAME,' ',''),'应交所得税',f.BQ_YEAR_VALUES,0) BQ_YJSDS,
decode(replace(f.KPI_NAME,' ',''),'应交所得税',f.TQ_YEAR_VALUES,0) TQ_YJSDS,
decode(replace(f.KPI_NAME,' ',''),'利润总额',f.BQ_YEAR_VALUES,0 ) BQ_LR,
decode(replace(f.KPI_NAME,' ',''),'利润总额',f.TQ_YEAR_VALUES,0) TQ_LR,
decode(replace(f.KPI_NAME,' ',''),'销量(万支)',f.BQ_YEAR_VALUES/5,0 ) BQ_XL,
decode(replace(f.KPI_NAME,' ',''),'销量(万支)',f.TQ_YEAR_VALUES/5,0) TQ_XL
FROM   FINA.FAC_XLS_MAIN_FINANCE_KPI f
where I_YEAR='2019'
and I_MONTH='12'
and f.ORG_CODE not in('10000001','99000002')
and f.BUSINESS_TYPE='0'

1.当月中的日期为单个数的时候,例如1,可以通过判断小于10进行补0的方式来组成年月

2.KPI_NAME是excel导入进去的,有可能含有空格,所以判断时先replace掉

3.因为后面是对值的sum,当有字段值为null时,sum结果为null,所以在decode的时候,赋予默认值0

4. ORG_CODE排除99000002是因为导入的中烟实业的数据只有控股数据,不包含非控股数据,需要对实业

数据进行重新的计算,排除10000001是因为要对数据根据税利增减额由高到低排序,为了保证全国工业

合计在第一位,所以要对全国工业进行单独计算,最后采用union all的形式,将这三块数据进行整合

5.例如增长率等值,因为一般报表需要保留两位小数,所以数据库中要保留四位小数

 

posted @ 2019-12-18 15:10  renzy194  阅读(440)  评论(0编辑  收藏  举报