行列转换实例
SQL行列转换实战(转载)                  表ttt有三个字段
SQL行列转换实战(转载)                  seq  --序列
SQL行列转换实战(转载)                  jcxm --检查项目
SQL行列转换实战(转载)                  zhi  --值
SQL行列转换实战(转载)
SQL行列转换实战(转载)                  数据分别如下:
SQL行列转换实战(转载)                  seq   jcxm       zhi
SQL行列转换实战(转载)                  -------      --------          --------
SQL行列转换实战(转载)                  11     1    0.50
SQL行列转换实战(转载)                  11     2    0.21
SQL行列转换实战(转载)                  11     3    0.25
SQL行列转换实战(转载)                  12     1    0.24
SQL行列转换实战(转载)                  12     2    0.30
SQL行列转换实战(转载)                  12     3    0.22                             
SQL行列转换实战(转载)
SQL行列转换实战(转载)                  实现功能
SQL行列转换实战(转载)                  创建视图时移动行值为列值
SQL行列转换实战(转载)
SQL行列转换实战(转载)
SQL行列转换实战(转载)                  create view v_view1
SQL行列转换实战(转载)                  as
SQL行列转换实战(转载)                  select seq,
SQL行列转换实战(转载)                         sum(decode(jcxm,1, zhi)) 检测项目1,
SQL行列转换实战(转载)                         sum(decode(jcxm,2, zhi)) 检测项目2, 
SQL行列转换实战(转载)                         sum(decode(jcxm,3, zhi)) 检测项目3 
SQL行列转换实战(转载)                  from ttt
SQL行列转换实战(转载)                  group by seq;
SQL行列转换实战(转载)
SQL行列转换实战(转载)                  序号 检测项目1  检测项目2  检测项目3
SQL行列转换实战(转载)                  11     0.50    0.21     0.25
SQL行列转换实战(转载)                  12     0.24    0.30     0.22
SQL行列转换实战(转载)
SQL行列转换实战(转载) 
SQL行列转换实战(转载)
SQL行列转换实战(转载)                  技巧:
SQL行列转换实战(转载)                  用THEN中的0和1来进行统计(SUM)
SQL行列转换实战(转载)
SQL行列转换实战(转载)                  jcxm   zhi
SQL行列转换实战(转载)                  ----   ----
SQL行列转换实战(转载)                  a           1
SQL行列转换实战(转载)                  b           1
SQL行列转换实战(转载)                  a           3
SQL行列转换实战(转载)                  d           2
SQL行列转换实战(转载)                  e           4
SQL行列转换实战(转载)                  f           5
SQL行列转换实战(转载)                  a           5
SQL行列转换实战(转载)                  d           3
SQL行列转换实战(转载)                  d           6
SQL行列转换实战(转载)                  b           5
SQL行列转换实战(转载)                  c           4
SQL行列转换实战(转载)                  b           3
SQL行列转换实战(转载)                  求他的zhi既是1,也是3,也是5的jcxm
SQL行列转换实战(转载)                  方法一
SQL行列转换实战(转载)                  select jcxm
SQL行列转换实战(转载)                  from ttt
SQL行列转换实战(转载)                  group by jcxm
SQL行列转换实战(转载)                  having sum(decode(zhi,1,-1,3,-1,5,-1,0)) = -3
SQL行列转换实战(转载)                  方法二
SQL行列转换实战(转载)                  select jcxm from ttt 
SQL行列转换实战(转载)                  group by jcxm having (sign(sum(decode(zhi,1,-1,0)))+
SQL行列转换实战(转载)                  sign(sum(decode(zhi,3,-1,0)))+sign(sum(decode(zhi,5,-1,0)))<=-3);
SQL行列转换实战(转载)
SQL行列转换实战(转载)                  ----------
SQL行列转换实战(转载)                  a
SQL行列转换实战(转载)                  b
SQL行列转换实战(转载)                  说明:
SQL行列转换实战(转载)                  sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1
SQL行列转换实战(转载)                  所以可以用sign和decode来完成比较字段大小来区某个字段
SQL行列转换实战(转载)                  select decode(sign(字段1-字段2),-1,字段3,字段4) from dual;
SQL行列转换实战(转载)
SQL行列转换实战(转载)                  sign是一个对于写分析SQL有很强大的功能
SQL行列转换实战(转载)                  下面我对sign进行一些总结:
SQL行列转换实战(转载)                  但属性student取0和1以外的值,或者student取两个以上的标法值,问题就不会这么简单了
SQL行列转换实战(转载)                  解决办法就是特征函数(abs(),sign())
SQL行列转换实战(转载)
SQL行列转换实战(转载)                  常用的特征算法
SQL行列转换实战(转载)                  [A=B]=1-abs(sign(A-B))
SQL行列转换实战(转载)                  [A!=B]=abs(sign(A-B)) 
SQL行列转换实战(转载)                  [A<B]=1-sign(1+sign(A-B)) 
SQL行列转换实战(转载)                  不能用-sign(A-B):因为如果不满足A<b则返回-1,而不是0,这样就不能用在字段选择上了
SQL行列转换实战(转载)                  [A<=B]=sign(1-sign(A-B))
SQL行列转换实战(转载)                  [A>B]=1-sign(1-sign(A-B))
SQL行列转换实战(转载)                  [A>=B]=sign(1+sign(A-B)))
SQL行列转换实战(转载)                  [NOTα]=1-d [α]
SQL行列转换实战(转载)                  [αANDb ]=d [α]*d [b ] (6)
SQL行列转换实战(转载)                  [αOR b ]=sign(d [α]+d [b ])
SQL行列转换实战(转载)
SQL行列转换实战(转载)                  例如:
SQL行列转换实战(转载)                  A<B                         Decode( Sign(A-B), -1, 1, 0 )      
SQL行列转换实战(转载)                     
SQL行列转换实战(转载)                  A<=B                         Decode( Sign(A-B), 1, 0, 1 )      
SQL行列转换实战(转载)                     
SQL行列转换实战(转载)                  A>B                         Decode( Sign(A-B), 1, 1, 0 )       
SQL行列转换实战(转载)                    
SQL行列转换实战(转载)                  A>=B                         Decode( Sign(A-B), -1, 0, 1 )     
SQL行列转换实战(转载)                      
SQL行列转换实战(转载)                  A=B                         Decode( A, B, 1, 0 )         
SQL行列转换实战(转载)                  A between B and C      Decode( Sign(A-B), -1, 0, 
SQL行列转换实战(转载)                  Decode(Sign(A-C), 1, 0, 1 ))         
SQL行列转换实战(转载)                  A is null                       Decode(A,null,1,0)         
SQL行列转换实战(转载)                  A is not null                 Decode(A,null,0,1)         A in 
SQL行列转换实战(转载)                  (B1,B2,SQL行列转换实战(转载),Bn)  Decode(A,B1,1,B2,1,SQL行列转换实战(转载),Bn,1,0)         
SQL行列转换实战(转载)                  nor LogA                    Decode( LogA, 0, 1, 0 )            
SQL行列转换实战(转载)                    (1-Sign(LogA)) 
SQL行列转换实战(转载)                  LogA and LogB            LogA * LogB 
SQL行列转换实战(转载)                  LogA or LogB              LogA + LogB 
SQL行列转换实战(转载)                  LogA xor LogB            Decode(Sign(LogA),Sign(LogB),0,1)    
SQL行列转换实战(转载)                  Mod(Sign(LogA),Sign(LogB),2
SQL行列转换实战(转载)
SQL行列转换实战(转载)
SQL行列转换实战(转载)                  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
SQL行列转换实战(转载)
SQL行列转换实战(转载)                  [NextPage]
SQL行列转换实战(转载)                  另外一个关于成绩的分析例子
SQL行列转换实战(转载)
SQL行列转换实战(转载)                  SELECT
SQL行列转换实战(转载)                  SUM(CASE WHEN cj <60 THEN 1 ELSE 0 END) as "not passed",
SQL行列转换实战(转载)                  SUM(CASE WHEN cj BETWEEN 60 AND 79 THEN 1 ELSE 0 END) as 
SQL行列转换实战(转载)                  "passed",
SQL行列转换实战(转载)                  SUM(CASE WHEN cj BETWEEN 80 AND 89 THEN 1 ELSE 0 END) as 
SQL行列转换实战(转载)                  "good",
SQL行列转换实战(转载)                  SUM(CASE WHEN cj >=90 THEN 1 ELSE 0 END) as "Excellent"
SQL行列转换实战(转载)                  FROM cjtable;
SQL行列转换实战(转载)
SQL行列转换实战(转载)                  decode用法2
SQL行列转换实战(转载)                  表、视图结构转化
SQL行列转换实战(转载)                  现有一个商品销售表sale,表结构为:
SQL行列转换实战(转载)                  month    char(6)      --月份
SQL行列转换实战(转载)                  sell    number(10,2)    --月销售金额
SQL行列转换实战(转载)
SQL行列转换实战(转载)                  现有数据为:
SQL行列转换实战(转载)                  200001  1000
SQL行列转换实战(转载)                  200002  1100
SQL行列转换实战(转载)                  200003  1200
SQL行列转换实战(转载)                  200004  1300
SQL行列转换实战(转载)                  200005  1400
SQL行列转换实战(转载)                  200006  1500
SQL行列转换实战(转载)                  200007  1600
SQL行列转换实战(转载)                  200101  1100
SQL行列转换实战(转载)                  200202  1200
SQL行列转换实战(转载)                  200301  1300
SQL行列转换实战(转载)
SQL行列转换实战(转载)                  想要转化为以下结构的数据:
SQL行列转换实战(转载)                  year   char(4)          --年份
SQL行列转换实战(转载)                  ------------   ---------------------         
SQL行列转换实战(转载)                  -------------------
SQL行列转换实战(转载)                  month1  number(10,2)   --1月销售金额
SQL行列转换实战(转载)                  month2  number(10,2)   --2月销售金额
SQL行列转换实战(转载)                  month3  number(10,2)   --3月销售金额
SQL行列转换实战(转载)                  month4  number(10,2)   --4月销售金额
SQL行列转换实战(转载)                  month5  number(10,2)   --5月销售金额
SQL行列转换实战(转载)                  month6  number(10,2)   --6月销售金额
SQL行列转换实战(转载)                  month7  number(10,2)   --7月销售金额
SQL行列转换实战(转载)                  month8  number(10,2)   --8月销售金额
SQL行列转换实战(转载)                  month9  number(10,2)   --9月销售金额
SQL行列转换实战(转载)                  month10  number(10,2)     --10月销售金额
SQL行列转换实战(转载)                  month11  number(10,2)     --11月销售金额
SQL行列转换实战(转载)                  month12  number(10,2)     --12月销售金额
SQL行列转换实战(转载)
SQL行列转换实战(转载)                  结构转化的SQL语句为:
SQL行列转换实战(转载)                  create or replace view
SQL行列转换实战(转载)                  v_sale(year,month1,month2,month3,month4,month5,month6,month7,month8,month9,month10,month11,month12)
SQL行列转换实战(转载)                  as
SQL行列转换实战(转载)                      select 
SQL行列转换实战(转载)                      substrb(month,1,4),
SQL行列转换实战(转载)                      sum(decode(substrb(month,5,2),'01',sell,0)),
SQL行列转换实战(转载)                      sum(decode(substrb(month,5,2),'02',sell,0)),
SQL行列转换实战(转载)                      sum(decode(substrb(month,5,2),'03',sell,0)),
SQL行列转换实战(转载)                      sum(decode(substrb(month,5,2),'04',sell,0)),
SQL行列转换实战(转载)                      sum(decode(substrb(month,5,2),'05',sell,0)),
SQL行列转换实战(转载)                      sum(decode(substrb(month,5,2),'06',sell,0)),
SQL行列转换实战(转载)                      sum(decode(substrb(month,5,2),'07',sell,0)),
SQL行列转换实战(转载)                      sum(decode(substrb(month,5,2),'08',sell,0)),
SQL行列转换实战(转载)                      sum(decode(substrb(month,5,2),'09',sell,0)),
SQL行列转换实战(转载)                      sum(decode(substrb(month,5,2),'10',sell,0)),
SQL行列转换实战(转载)                      sum(decode(substrb(month,5,2),'11',sell,0)),
SQL行列转换实战(转载)                      sum(decode(substrb(month,5,2),'12',sell,0))
SQL行列转换实战(转载)                      from sale
SQL行列转换实战(转载)                      group by substrb(month,1,4);
SQL行列转换实战(转载)
SQL行列转换实战(转载)                  体会:要用decode /group by/ order by/sign/sum来实现不同报表的生成 
SQL行列转换实战(转载)                  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
SQL行列转换实战(转载)                  CASE应用
SQL行列转换实战(转载)
SQL行列转换实战(转载)                  1        1        部门a        800        男
SQL行列转换实战(转载)                  2        2        部门b        900        女
SQL行列转换实战(转载)                  3        3        部门a        400        男
SQL行列转换实战(转载)                  4        4        部门d        1400        女
SQL行列转换实战(转载)                  5        5        部门e        1200        男
SQL行列转换实战(转载)                  6        6        部门f        500        男
SQL行列转换实战(转载)                  7        7        部门a        300        女
SQL行列转换实战(转载)                  8        8        部门d        1000        男
SQL行列转换实战(转载)                  9        9        部门d        1230        女
SQL行列转换实战(转载)                  10        10        部门b        2000        女
SQL行列转换实战(转载)                  11        11        部门c        2000        男
SQL行列转换实战(转载)                  12        12        部门b        1200        男
SQL行列转换实战(转载)
SQL行列转换实战(转载)                    SELECT jcxm as 部门,COUNT(seq) as 人数,
SQL行列转换实战(转载)                      SUM(CASE SEX WHEN 1 THEN 1 ELSE 0 END) as 男,
SQL行列转换实战(转载)                            SUM(CASE SEX WHEN 2 THEN 1 ELSE 0 END) as 女,
SQL行列转换实战(转载)                      SUM(CASE SIGN(zhi-800) WHEN -1 THEN 1 ELSE 0 END) as 
SQL行列转换实战(转载)                  小于800元,
SQL行列转换实战(转载)                      SUM((CASE SIGN(zhi-800)*SIGN(zhi-1000)                    

相关文章:

  • 2021-08-18
  • 2021-11-06
  • 2021-06-24
  • 2021-06-29
  • 2022-02-07
  • 2021-10-22
猜你喜欢
  • 2021-07-22
  • 2022-12-23
  • 2022-02-20
  • 2022-12-23
  • 2021-10-03
  • 2021-10-16
相关资源
相似解决方案