易截截图软件、单文件、免安装、纯绿色、仅160KB

sql server和oracle行转列的一种典型方法

sql server和oracle行转列的一种典型方法
前言:网上有不少文章是讲行转列的,但是大部分都是直接贴代码,忽视了中间过程,本人自己思考了下为什么要这样实现,并且做了如下的笔记,对有些懂的人来说可能没有价值,希望对还不懂的人有一点借鉴意义。
对于有些业务来说,数据在表中的存储和其最终的Grid表现恰好相当于把源表倒转,那么这个时候我们就碰到了如何把行转化为列的问题,为了简化问题,我们且看如下查询出来的数据,您不必关心表的设计以及sql语句:

假设用到的sql语句为:
SELECT [姓名],[时代],[金钱]
  from [test].[dbo].[people]  
这个表存储了两个人在不同时代(时代是固定的三个:年轻、中年和老年)拥有的金币,其中:
张三在年轻、中年和老年时期分别拥有1000、5000、800个金币;
李四在年轻、中年和老年时期分别拥有1200、6000、500个金币。
现在我们想把两人在不同阶段拥有的金币用类似如下的表格来展现:
姓名
年轻
中年
老年
张三
1000
5000
800
李四
1200
6000
500
我们现在考虑用最简单和直接的办法来实现,其实关键是如何创建那些需要增加的列,且如何设定其值,现在我们来创建“年轻”列,关键的问题是,这一列的值如何设定?合法的逻辑应该是这样:如果该行不是“年轻”时代,那么其“金钱”我们认为是0,那么sql语句如何写呢?
如果是用的sql server,那么肯定要用到case了:
case  [时代] when '年轻' then [金钱] else 0 end as 年轻

case when  [时代]= '年轻' then [金钱] else 0 end as 年轻
如果用的是oracle,那么要用到decode函数,decode(1+1,3,'错',2,'是',5,'错','都不满足下返回的值'),这个函数将返回“是”,具体用法限于篇幅这里不再介绍,相信大家从这个式子可以大概了解到其意思,用decode创建“年轻”列的句子是:完整的sql语句如下所示:
decode(时代,'年轻',金钱,0)) 年轻
SELECT [姓名],[时代],[金钱], 
case  [时代] when '年轻' then [金钱] else 0 end as 年轻,
case  [时代] when '中年' then [金钱] else 0 end as&nb


相关文档:

JDBC存取ORACLE大型数据对象LOB几种情况的示范类

      import Java.io.*;
  import java.util.*;
  import java.sql.*;
  public class LobPros
  {
  /**
  * Oracle驱动程序
  */
  private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
  /**
  * ORACLE连接用URL
  */
  p ......

SQL Server和Oracle的常用函数对比

---------数学函数
1.绝对值
S:select abs(-1) value
O:select abs(-1) value from dual
2.取整(大)
S:select ceiling(-1.001) value
O:select ceil(-1.001) value from dual
3.取整(小)
S:select floor(-1.001) value
O:select floor(-1.001) value from dual
4.取整(截取)
S:select cast(-1.002 as int) v ......

sql xml 入门

*
sql xml 入门:
    --by jinjazz
    --http://blog.csdn.net/jinjazz
   
    1、xml:        能认识元素、属性和值
   
    2、xpath:    寻址语言,类似wind ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号