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后变成浮点数再进行相除,不然结果依旧是整数

你可能感兴趣的:(sql 点滴)