
SQL
龙明倩
架构设计、BI管理开发、大数据研究杂项
展开
-
结果集转置为多行
<br />--把结果集转置为多行<br />例如:返回每个员工及他们的职位(JOB),目前的查询返回如下结果集:<br />SELECT JOB,ENAME FROM SCOTT.EMP<br /> <br />希望重新设置结果集的格式,使每个职位使用一列:ORACLE和SQL SERVER写法:select max(case when job='CLERK' then ename else null end) as clerks,<br />max(case when job='ANALYST' the原创 2011-05-26 23:59:00 · 634 阅读 · 0 评论 -
mysql实现一样变多行(表关联,批量实现)
网上很多方法是采用split的方式,写函数,判断分隔符,来截取字段放到临时表,但这样,无法批量来处理一行变多行的问题,如一个log文件,里面的日志格式为:1 a,b,c,d,2,3,42 abb,bbb,ccc,222,333要产生这样的结果:1 a1 b1 c1 d1原创 2014-03-27 18:14:25 · 4742 阅读 · 0 评论 -
报表与数据仓库运算-练习笔记2
题目九:返回未包含在GROUP BY 中的列找到每个部门中工资最高和最低的员工,以及每种职位中工资最高和最低的员工,希望返回的结果集如下: 实现SQL:SELECT deptno,ename,job,sal,max_dep_sal,min_dep_sal,case sal when min_dep_sal then LOW SAL IN DEPT whe原创 2011-06-30 00:50:00 · 415 阅读 · 0 评论 -
报表与数据仓库运算-练习笔记1
问题五:抑制结果集中的重复值 实现语句:select case when deptno = cnt then null else deptno end as deptno,ename from (select deptno,ename,lag(deptno) over(order by deptno) as cnt from emp) 问题六:创建固定大小的数据桶原创 2011-06-29 00:14:00 · 405 阅读 · 0 评论 -
报表与数据仓库运算-练习笔记
练习记录,目的是复习SQL编写,使自己的SQL编写能力得到进一步的提升。练习一:select t.deptno,count(*) as CNT from emp t group by t.deptno ORDER BY 1 转换成: select SUM(case when t.deptno = 10 then 1 ELSE 0 end) as DEPT原创 2011-06-22 23:35:00 · 459 阅读 · 0 评论 -
转-存储过程的优点
存储过程的优点:1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL 语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete 时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。3.存储过程可以重复使用,可减少数据库开发人员的工作量4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权-------------------------------转载 2011-06-01 11:32:00 · 399 阅读 · 0 评论 -
抑制结果集中的重复值
<br />生成报表时如果两行的同一列包含相同值,希望这个值仅显示一次。例如,要从表EMP中找出DEPTNO 和ENAME,按DEPTNO给所有行分组,而且DEPTNO仅显示一次。希望返回如下的结果集:<br /> <br /> <br />解决方案:<br />ORACLE<br />使用窗口函数LAG OVER,访问当期行的前几行,以便为每个分区找到第一个DEPTNO:<br />SELECT to_number(decode(lag(deptno) over(ORDER BY deptno),<br原创 2011-05-27 01:08:00 · 576 阅读 · 0 评论 -
将结果集反向转置为一列
<br />把查询中返回的所有列转换为1列。例如,返回DEPTNO 10 中所有员工的ENAME,JOB和SAL,而且要把这3个值放到一列中。为每个员工返回3行信息,而且在两个员工之间加一个空白行,希望返回的结果集如下:解决方案:关键是用笛卡儿积为每个员工返回4行,这样就可以为每列产生一行,而且在两个员工之间加一个空白行。select case rn<br /> when 1 then ename<br /> when 2 then job<br />原创 2011-05-27 00:37:00 · 569 阅读 · 0 评论 -
mysql的show profile
这里还需要注意一点就是,需要安装profile模块才能实现。如下内容转自:http://blog.chinaunix.net/u/29134/showart_480834.html要注意两点。1、不过版本要在5.0.37之后手册上介绍:(SHOW PROFILES and SHOW PROFILE were added in MySQL 5.0.37. )转载 2014-03-22 09:42:54 · 556 阅读 · 0 评论