SQL行列转换实战行列转换实例
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]=
1abssign(A-B))
SQL行列转换实战                  [A!=B]=
abssign(A-B)) 
SQL行列转换实战                  [A
<B]=1sign1sign(A-B)) 
SQL行列转换实战                  不能用
-sign(A-B):因为如果不满足A<b则返回-1,而不是0,这样就不能用在字段选择上了
SQL行列转换实战                  [A
<=B]=sign(1sign(A-B))
SQL行列转换实战                  [A
>B]=1sign1sign(A-B))
SQL行列转换实战                  [A
>=B]=sign(1sign(A-B)))
SQL行列转换实战                  [NOTα]=
1-d [α]
SQL行列转换实战                  [αANDb ]=d [α]
*d [b ] (6)
SQL行列转换实战                  [αOR b ]=
sign(d [α]+d []
SQL行列转换实战
SQL行列转换实战                  例如:
SQL行列转换实战                  A
<B                         Decode( Sign(A-B), -110 )      
SQL行列转换实战                     
SQL行列转换实战                  A
<=B                         Decode( Sign(A-B), 101 )      
SQL行列转换实战                     
SQL行列转换实战                  A
>B                         Decode( Sign(A-B), 110 )       
SQL行列转换实战                    
SQL行列转换实战                  A
>=B                         Decode( Sign(A-B), -101 )     
SQL行列转换实战                      
SQL行列转换实战                  A
=B                         Decode( A, B, 10 )         
SQL行列转换实战                  A 
between B and C      Decode( Sign(A-B), -10
SQL行列转换实战                  Decode(
Sign(A-C), 101 ))         
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, 
010 )            
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 ENDas "not passed",
SQL行列转换实战                  
SUM(CASE WHEN cj BETWEEN 60 AND 79 THEN 1 ELSE 0 ENDas 
SQL行列转换实战                  "passed",
SQL行列转换实战                  
SUM(CASE WHEN cj BETWEEN 80 AND 89 THEN 1 ELSE 0 ENDas 
SQL行列转换实战                  "good",
SQL行列转换实战                  
SUM(CASE WHEN cj >=90 THEN 1 ELSE 0 ENDas "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 ENDas 男,
SQL行列转换实战                            
SUM(CASE SEX WHEN 2 THEN 1 ELSE 0 ENDas 女,
SQL行列转换实战                      
SUM(CASE SIGN(zhi-800WHEN -1 THEN 1 ELSE 0 ENDas 
SQL行列转换实战                  小于800元,
SQL行列转换实战                      
SUM((CASE SIGN(zhi-800)*SIGN(zhi-1000)                    

相关文章:

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