- 浏览: 178858 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (140)
- java (138)
- 佳能500d (1)
- 佳能 (1)
- Oracle数据库文档构造器--Oraschemadoc (1)
- EJB调用的原理分析 (1)
- 使用css3画"静音"icon (1)
- 张小庆,在路上(16)-给弟弟找工作 (1)
- Android短信编解码方式 (1)
- lua web 开发 (1)
- zk安装 (1)
- 菜单多国语言化遇到的问题 (1)
- 【转】纯文本配置还是注册表 (1)
- C++ delete删除动态分配的内存 (1)
- eclipse下修改项目名导致tomcat内发布名不一致的解决方法 (1)
- Lucene实现各种常见文档的全文检索 (1)
- 项目风险之人员流动风险 (1)
- 时空数据模型简介 (1)
- XSLT学习笔记 (1)
- 依然是计划 如果没有计划似乎就没有了动力 (1)
- How to Succeed in A Professional Career (1)
- 编程环境应该和讨论社区完美的进行结合 (1)
- C#坦克大战实现 (1)
- 电脑用户密码忘记了怎么办? (1)
- java.lang.NoClassDefFoundError: org/dom4j/DocumentException (1)
- 关于成立北京Android爱好者俱乐部的声明 (1)
- Android开发之初探音频的播放 (1)
- Struts标签循环List (1)
- CAP原理 (1)
- javabean的自动生成 (1)
- 打开CMD一闪就关的解决方案 (1)
- 我是项目经理,我的项目管理日记【20111202】 (1)
- Html5游戏开发入门笔记--<躲砖块> (1)
- mysql中查看和设置系统字符编码 (1)
- PhoneGap-Accelerometer (1)
- [Jetty]Jetty工作原理 (1)
- Ibatis+Spring整合实例Demo+源码 (1)
最新评论
-
u012985907:
dsdsdsdsd
FLASH上传与拍照 -头像-avatart -
a379933101:
?????????????????????????????
android listview 连续调用 getview问题分析及解决 -
151tmac:
拜托下次粘贴的时候,粘贴为纯文本
android listview 连续调用 getview问题分析及解决 -
liudezhong135:
...
Spring3MVC 在JSP中使用@ModelAttribute -
香飘飘2011:
要是不知道层次级别,如何退回到根目录呢
FTP退回到根目录
工作中常需要把数据库中某数据按照某列转成行。而展现的工具可能又只支持1句sql完成,所以就考虑写视图解决。但是写此类sql既繁琐,又容易出错,所以想写一个自动生成的脚本处理。
解决的问题,例:
表结构为:tab1
orgid(机构) gender(性别) ,itemid(项目) ,val(值)
0322 ,0,a,1
0322 ,0,b,4
0321 ,1,c,5
0324 ,1,c,3
展现效果:
0322,0,1,4,0
0321,0,0,0,5
0324,0,0,0,3
解决方法:
配置文件: sql.txt
说明:
以"."分割列,分别是:视图名.表名,查询项.分组项.分组值(多值以","分割)
脚本: sql.sh
生成的代码:test.sql
使用方法:
适用范围:
报表,查询。
通过该方法,在没有报表工具的情况下解决了行列转换问题。
已知缺点:
1.由于不熟悉perl,简单解决方案,所以觉得用awk处理,这样处理导致配置文件配置不灵活
2.在数据量过大的时候,这种查询效率也不会高,不过既然要行列转换,性能总是要有牺牲。
在db2中,没有oracle的decode类似的函数(也许有也可能,我没仔细去找),所以用union,不过我猜想即使用decode,效率也是差不多,当然仅仅是猜想而已,没在oralce下测试过。union实现要比左外连接效率要高很多,这方面测试过。
如果确实有更高性能要求,把创建试图语句改成创建表,每天晚上执行生成的insert语句即可。(bi项目的数据,通常至少延迟1天,所以可在晚上跑数据)
补充说明:
我是采用union实现的,但其实也可生成case when,decode(oralce)方式实现,但其实这与本主题并不矛盾。本方法不过是提出一个通过脚本生成相关sql的思路,重点不在sql技巧。
至于效率问题,如果很效率问题是瓶颈,可以改动awk生成creat table ,insert语句,然后定时抽取。
我前面做的那个项目,就是通过类似手段解决问题的。简单描述:通过某种定制手段,直接生成sql,实行数据仓库的清洗工作。这也是我们几个数据仓库的项目经验总结。经证实,这种方法确实切实有效,减少了大家相当多的工作量。前面一个数据仓库投入11个人左右,而这个项目我们只投入了7人,除项目经理外还有2人很少编码(做业务分析去了)。但是项目中,我们大量采用类似方法实现,带来了相当大效果。
后面这个项目数据量虽然比前面的小,但是业务其实更复杂。通过大量使用脚本,开发效率得到了大大提升。难怪以前的一个同事说:在他们现公司他们部门,所有的开发都是脚本,几乎不用脚本外的与语言。该兄弟其实可是c语言高手,现在完全投入到脚本怀抱中去了。
解决的问题,例:
表结构为:tab1
orgid(机构) gender(性别) ,itemid(项目) ,val(值)
0322 ,0,a,1
0322 ,0,b,4
0321 ,1,c,5
0324 ,1,c,3
展现效果:
0322,0,1,4,0
0321,0,0,0,5
0324,0,0,0,3
解决方法:
配置文件: sql.txt
v_tab1.tab1.orgid,gender.val.itemid.a,b,c
说明:
以"."分割列,分别是:视图名.表名,查询项.分组项.分组值(多值以","分割)
脚本: sql.sh
awk -f'.' '{ test = $6 alen=split(test,cols,","); for( idx=1;idx<=alen;idx++) { sqlalias[idx]="v" idx "_" $4 } print " drop view " $1 " ; " print " create view " $1 " \n as " print "select " $3 "," for( idx=1;idx<=alen;idx++) { if( idx == alen ) print " \t sum(v" idx "_" $4 ") as v" idx "_" $4 else print " \t sum(v" idx "_" $4 ") as v" idx "_" $4 " ," } print "from (" for( idx=1;idx<=alen;idx++) { csql = "\tselect " $3 "," "\n \t \t " if( idx != 1 ) csql = "\tunion \n" csql for( i=1;i<=alen;i++) { if( i == idx ) csql = csql $4 else csql = csql " 0 " csql = csql " as " sqlalias[i] if( i != (alen) ) csql = csql " , " } csql = csql " \tfrom " $2 " where " $5 "='\''" cols[idx] "'\''" print csql } print " ) aaa " print " group by " $3 ";" }' sql.txt > test.sql
生成的代码:test.sql
drop view v_tab1 ; create view v_tab1 as select orgid,gender, sum(v1_val) as v1_val , sum(v2_val) as v2_val , sum(v3_val) as v3_valfrom ( select orgid,gender, val as v1_val , 0 as v2_val , 0 as v3_val from tab1 where itemid='a' union select orgid,gender, 0 as v1_val , val as v2_val , 0 as v3_val from tab1 where itemid='b' union select orgid,gender, 0 as v1_val , 0 as v2_val , val as v3_val from tab1 where itemid='c' ) aaa group by orgid,gender;
使用方法:
select * from v_tab1
适用范围:
报表,查询。
通过该方法,在没有报表工具的情况下解决了行列转换问题。
已知缺点:
1.由于不熟悉perl,简单解决方案,所以觉得用awk处理,这样处理导致配置文件配置不灵活
2.在数据量过大的时候,这种查询效率也不会高,不过既然要行列转换,性能总是要有牺牲。
在db2中,没有oracle的decode类似的函数(也许有也可能,我没仔细去找),所以用union,不过我猜想即使用decode,效率也是差不多,当然仅仅是猜想而已,没在oralce下测试过。union实现要比左外连接效率要高很多,这方面测试过。
如果确实有更高性能要求,把创建试图语句改成创建表,每天晚上执行生成的insert语句即可。(bi项目的数据,通常至少延迟1天,所以可在晚上跑数据)
补充说明:
我是采用union实现的,但其实也可生成case when,decode(oralce)方式实现,但其实这与本主题并不矛盾。本方法不过是提出一个通过脚本生成相关sql的思路,重点不在sql技巧。
至于效率问题,如果很效率问题是瓶颈,可以改动awk生成creat table ,insert语句,然后定时抽取。
我前面做的那个项目,就是通过类似手段解决问题的。简单描述:通过某种定制手段,直接生成sql,实行数据仓库的清洗工作。这也是我们几个数据仓库的项目经验总结。经证实,这种方法确实切实有效,减少了大家相当多的工作量。前面一个数据仓库投入11个人左右,而这个项目我们只投入了7人,除项目经理外还有2人很少编码(做业务分析去了)。但是项目中,我们大量采用类似方法实现,带来了相当大效果。
后面这个项目数据量虽然比前面的小,但是业务其实更复杂。通过大量使用脚本,开发效率得到了大大提升。难怪以前的一个同事说:在他们现公司他们部门,所有的开发都是脚本,几乎不用脚本外的与语言。该兄弟其实可是c语言高手,现在完全投入到脚本怀抱中去了。
发表评论
-
Ibatis+Spring整合实例Demo+源码
2012-02-08 12:58 1429<span style="color: ... -
[Jetty]Jetty工作原理
2012-02-07 17:29 1011http://www.ibm.com/develo ... -
PhoneGap-Accelerometer
2012-02-07 14:23 1228采集设备在x、y、z方向上的动作。 acce ... -
mysql中查看和设置系统字符编码
2012-02-04 14:28 1732--查看数据库的字符集 show variables ... -
Html5游戏开发入门笔记--<躲砖块>
2012-02-03 12:04 1186学习了html5中的canvas画布元素,自己写了一个 ... -
我是项目经理,我的项目管理日记【20111202】
2012-02-03 10:19 1018其实前段时间项目 ... -
打开CMD一闪就关的解决方案
2012-02-02 12:14 1419转:http://blog.163.com/cumt_ ... -
javabean的自动生成
2012-02-02 11:59 1432在jcreator pro中自动生成 在j ... -
CAP原理
2012-02-01 09:00 1180作者:NinGoo 原文链接:ht ... -
Struts标签循环List
2012-01-31 14:18 986<pre name="code&quo ... -
Android开发之初探音频的播放
2012-01-11 16:29 1137<h1>Android开发之初探音频的播放 ... -
关于成立北京Android爱好者俱乐部的声明
2012-01-11 14:33 887<blockquote dir="lt ... -
java.lang.NoClassDefFoundError: org/dom4j/DocumentException
2011-12-28 13:03 15156<span style="font-f ... -
电脑用户密码忘记了怎么办?
2011-12-28 12:14 1008<span style="fon ... -
C#坦克大战实现
2011-12-20 13:29 1147记得在大学学java ... -
编程环境应该和讨论社区完美的进行结合
2011-12-19 11:54 787在学习.NET过程中,经常会遇到很多问题,有的时候会找 ... -
How to Succeed in A Professional Career
2011-12-19 10:29 766(From Microsoft)<br>& ... -
依然是计划 如果没有计划似乎就没有了动力
2011-12-15 10:39 900</span></span>& ... -
XSLT学习笔记
2011-12-14 14:04 692<p class="MsoNorma ... -
时空数据模型简介
2011-12-14 13:59 1512<p class="MsoNo ...
相关推荐
"OpenOffice转换多列Excel为PDF行列对应解决方法"这个主题涉及到一个常见的问题,即如何在保持数据结构清晰的前提下,有效地进行格式转换。OpenOffice是一款免费的办公软件套件,它提供了类似Microsoft Office的功能...
首先,创建一个批处理脚本,指定转换的文件路径和输出的PDF路径,然后运行脚本来一次性完成转换。 通过以上步骤,你可以有效地解决OpenOffice在转换多列Excel为PDF时可能出现的行列对应问题。在转换过程中,保持...
例如,如果有一个DataTable dt,其中列名为"Column1"和"Column2",我们可以创建一个新的DataTable dtTranspose,然后遍历每一行,将列值作为新行的列值插入。 2. **List的行列转换** 当数据存储在List...
项目开发中需要用到一个拖动交换表格的功能,上网搜到雅虎的一...就自己综合网上资源写了一个可兼容IE,firefox,Chrome,Safari和Opera等主流浏览器的纯JS动态拖动表格实现行列内容交换。主要代码就不到400行JS而已。
行列式(Determinant)是一个重要的数学概念,通常用于线性代数领域,它对于解决线性方程组、求解特征值问题等具有重要意义。行列式的计算方法有很多种,其中一种常用的方法是通过高斯消元法将原矩阵转换为上三角...
以下是对Excel行列号转化这一主题的详细说明: 1. **行列号的基本概念** - **行号**:从1开始递增,表示表格中的每一行。 - **列号**:从A开始,依次为B、C直至Z,然后进入双字母组合如AA、AB,以此类推。 2. **...
首先,我们来看一个在 SQL Server 中实现行列互换的例子。这里有一个名为 `tbltest1` 的表,包含学生名(`student`)、科目(`kemu`)以及分数(`fenshu`)等字段。 ```sql -- 原始数据表结构 CREATE TABLE tbltest...
例如,如果一个n阶行列式是对称的或者反对称的,那么可以借助这些性质简化计算。对于反对称行列式,当阶数为奇数时,其值总是0。 3. **化为三角形行列式**: 通过行列式的行变换(如行交换、倍加等),可以将行列...
在C++编程中,计算矩阵的行列式是线性代数中的一个重要操作,它在解决线性方程组、分析矩阵的性质以及图形学等领域有着广泛的应用。行列式的值可以帮助我们判断一个矩阵是否可逆,如果一个矩阵的行列式不为零,则该...
通过计算\(D_3\)与范德蒙行列式\(D\)的乘积,得到一个新的行列式\(D_4\)。由于\(D_3\)和\(D\)的值相对容易计算,因此可以利用行列式乘法的性质来简化\(D_4\)的计算。 具体地,\(D_4\)的每一行可以视为特定多项式在\...
根据给定文件的信息,本文将详细介绍如何使用Java编程语言实现一个计算任意阶数行列式的程序。主要内容包括理解行列式的概念、解析程序结构以及探讨其实现原理。 ### 行列式的概念 行列式是一种特殊的数学对象,它...
例如,如果你有一个销售数据表,其中包含产品、月份和销售额,你可以使用`PIVOT`将每个月的销售额作为单独的列显示,使得每个产品都有一个行,每列代表一个月的销售额。这在展示数据时提供了更好的可读性。 2. **...
在实际工作中,行列转换经常被用于解决以下问题: - **数据聚合**:将分散在多行的数据汇总到一行中。 - **数据透视**:将数据表的结构进行调整,以便更好地分析数据。 - **数据可视化**:为了图表显示的需要,将...
行列式是线性代数中的一个基本概念,用于表示矩阵的一种数值特性。在VB(Visual Basic)编程环境中,我们可以利用其强大的数据处理能力和用户界面设计功能来实现行列式的计算。以下将详细介绍如何在VB中编写行列式的...
行列式方法是线性代数中的一个重要概念,用于处理矩阵的一种数学技巧,它涉及到矩阵的性质和计算。在处理特定类型的行列式时,有时可以利用一些特殊的策略来简化计算过程,尤其是在解决奇数阶反对称行列式的问题时。...
第三个程序使用了一个简单的交换元素的方式来调整最大元素的位置,而第四个程序使用了一个更复杂的算法来计算行列式。 知识点: * 高斯消元法:一种常用的矩阵计算方法,用于计算行列式的值。 * fabs 函数:数学库...
1. **子式**:在计算一个高阶行列式时,可以从其中选取一行(或一列),该行(或列)中的每个元素与其对应的余子式结合,形成一个新的行列式,这个新的行列式称为原行列式的子式。 2. **余子式**:对于一个多阶行列...
本文将详细介绍如何在SQL中实现表数据的行列互换,并通过一个具体的例子来展示两种实现方式。 #### 问题背景 假设我们有一张学生成绩表`tb`,其结构如下: - `Name`:学生姓名 - `Subject`:科目名称 - `Result`:...