表ttt有三个字段 seq --序列 jcxm --检查项目 zhi --值 数据分别如下: seq jcxm zhi ------- -------- -------- 11 1 0.50 11 2 0.21 11 3 0.25 12 1 0.24 12 2 0.30 12 3 0.22 实现功能 创建视图时移动行值为列值 create view v_view1 as select seq, sum(decode(jcxm,1, zhi)) 检测项目 1, sum(decode(jcxm,2, zhi)) 检测项目 2, sum(decode(jcxm,3, zhi)) 检测项目 3 from ttt group by seq; 序号 检测项目 1 检测项目 2 检测项目 3 11 0.50 0.21 0.25 12 0.24 0.30 0.22 技巧: 用 THEN中的 0和 1来进行统计(SUM) jcxm zhi ---- ---- a 1 b 1 a 3 d 2 e 4 f 5 a 5 d 3 d 6 b 5 c 4 b 3 求他的zhi既是1,也是3,也是5的jcxm 方法一 select jcxm from ttt group by jcxm having sum(decode(zhi,1,-1,3,-1,5,-1,0)) = -3 方法二 select jcxm from ttt group by jcxm having (sign(sum(decode(zhi,1,-1,0)))+ sign(sum(decode(zhi,3,-1,0)))+sign(sum(decode(zhi,5,-1,0)))<=-3); ---------- a b 说明: sign()函数根据某个值是0、正数还是负数,分别返回 0、1、-1 所以可以用 sign和 decode来完成比较字段大小来区某个字段 select decode(sign(字段 1-字段 2),-1,字段 3,字段 4) from dual; sign是一个对于写分析 SQL有很强大的功能 下面我对 sign进行一些总结: 但属性 student取 0和 1以外的值,或者 student取两个以上的标法值,问题就不会这么简单了 解决办法就是特征函数(abs(),sign()) 常用的特征算法 [A=B]=1-abs(sign(A-B)) [A!=B]=abs(sign(A-B)) [AB]=1-sign(1-sign(A-B)) [A>=B]=sign(1+sign(A-B))) [NOTα ]=1-d [α ] [α ANDb ]=d [α ]*d [b ] (6) [α OR b ]=sign(d [α ]+d [b ]) 例如: AB Decode( Sign(A-B), 1, 1, 0 ) A>=B Decode( Sign(A-B), -1, 0, 1 ) A=B Decode( A, B, 1,...