`
longgangbai
  • 浏览: 7251213 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

列變行的SQL語句

阅读更多

 

项目中使用的列列变行的几种方法:

第一种方法:简单易用,但是效率很低的查询方式 
 select h.hotel,
 (select a.distance from t_hotel_location_detail a  where a.location_pos=0 and a.hotel=5019) a,
 (select a.distance from t_hotel_location_detail a  where a.location_pos=1 and a.hotel=5019) b,
 (select a.distance from t_hotel_location_detail a  where a.location_pos=2 and a.hotel=5019) c,
 (select a.distance from t_hotel_location_detail a  where a.location_pos=3 and a.hotel=5019) d,
 (select a.distance from t_hotel_location_detail a  where a.location_pos=4 and a.hotel=5019) f,
  (select a.distance from t_hotel_location_detail a  where a.location_pos=5 and a.hotel=5019) d
  from t_hotel_location_detail h 
  group by h.hotel
 
 
 
 分组查询,效率相当但是巧用聚合函数的应用Max,

此处的酒店的6个方位中每一个均为一个所以使用和不使用查询数据一样巧用聚合函数,简化查询
 
 Select hotel,

 

 

 

多列變一行

a 表中有三条记录如下:

M N
1 开1
101 开2
10101 开3

如何用一条SQL将a表中的三条数据变成一条插入b表,如下:

M1 N1 M2 N2 M3 N3
1 开1 101 开2 10101 开3

 

WITH A AS (SELECT 1 M,'開1' N FROM DUAL
UNION
SELECT 101 M,'開2' N FROM DUAL
UNION
SELECT 10101 M,'開3' N FROM DUAL
)
SELECT
MAX(DECODE(C.SEQ, 1, C.M)) AS M1,
MAX(DECODE(C.SEQ, 1, C.N)) AS N1,
MAX(DECODE(C.SEQ, 2, C.M)) AS M2,
MAX(DECODE(C.SEQ, 2, C.N)) AS N2,
MAX(DECODE(C.SEQ, 3, C.M)) AS M3,
MAX(DECODE(C.SEQ, 3, C.N)) AS N3
FROM
(
SELECT A.M,
A.N,
ROW_NUMBER () OVER(PARTITION BY 1 ORDER BY A.M) AS SEQ
FROM A
) C

 

一列變一行

 

例2:

如下格式:

Col
aaaa
bbbb
cccc
....
转换后
col
aaaa,bbbb,cccc,....

with a as (select 'aaaa' co from dual
union
select 'bbbb' co from dual
union
select 'cccc' co from dual
)

方法一:
select substr(max(sys_connect_by_path(co,'->')),3) rm
from (select a.*,rownum rn from a)
start with rn=1
connect by rn-1=prior rn

方法二:

create or replace function ff (P_CO VARCHAR2)
return varchar2 is
v_co varchar2(400);
begin
for c1 in (select co from A WHERE CO=P_CO ) LOOP
v_co:=v_co||','||C1.CO;
END LOOP;
RETURN V_CO;
END ;
select MAX(FF(CO) FROM A;

 

一列變多行

WITH A AS (SELECT 'A' CD FROM DUAL
UNION
SELECT 'B' CD FROM DUAL
UNION
SELECT 'C' CD FROM DUAL
UNION
SELECT 'D' CD FROM DUAL
UNION
SELECT 'E' CD FROM DUAL
UNION
SELECT 'F' CD FROM DUAL
UNION
SELECT 'G' CD FROM DUAL
UNION
SELECT 'H' CD FROM DUAL
UNION
SELECT 'I' CD FROM DUAL
)
select
max(decode(mod(rownum, 5), 1, CD, null)) ID1,
max(decode(mod(rownum, 5), 2, CD, null)) ID2,
max(decode(mod(rownum, 5), 3, CD, null)) ID3,
max(decode(mod(rownum, 5), 4, CD, null)) ID4,
max(decode(mod(rownum, 5), 0, CD, null)) ID5
from a
group by ceil(rownum / 5)
ID1 ID2 ID3 ID4 ID5
--- --- --- --- ---
A B C D E
F G H I


SQL> WITH A AS (SELECT 1 CD1,0 CD2 FROM DUAL
2 UNION
3 SELECT 2 CD1,0 CD2 FROM DUAL
4 UNION
5 SELECT 3 CD1,0 CD2 FROM DUAL
6 UNION
7 SELECT 4 CD1,0 CD2 FROM DUAL
8 UNION
9 SELECT 5 CD1,0 CD2 FROM DUAL
10 )
11 SELECT * FROM (SELECT MAX(DECODE(RN,1,CD1,NULL)) ID1,
12 MAX(DECODE(RN,2,CD1,NULL)) ID2,
13 MAX(DECODE(RN,3,CD1,NULL)) ID3,
14 MAX(DECODE(RN,4,CD1,NULL)) ID4,
15 MAX(DECODE(RN,5,CD1,NULL)) ID5
16 FROM (SELECT CD1,CD2,ROW_NUMBER()OVER( ORDER BY CD1) RN FROM A)
17 UNION
18 SELECT MAX(DECODE(RN,1,CD2,NULL)) ID1,
19 MAX(DECODE(RN,2,CD2,NULL)) ID2,
20 MAX(DECODE(RN,3,CD2,NULL)) ID3,
21 MAX(DECODE(RN,4,CD2,NULL)) ID4,
22 MAX(DECODE(RN,5,CD2,NULL)) ID5
23 FROM (SELECT CD1,CD2,ROW_NUMBER()OVER( ORDER BY CD1) RN FROM A))
24 ORDER BY ID1 DESC
25 ;

ID1 ID2 ID3 ID4 ID5
---------- ---------- ---------- ---------- ----------
1 2 3 4 5

分享到:
评论

相关推荐

    sql2005全文检索.doc

    利用 MSFESQL 服务,SQL Server 可超出 SQL 标准对字符串列执行更为复杂的搜索。  MSFTESQL 服务担当了以下角色:  索引支持  MSFTESQL 实现了为数据库定义的全文目录和索引。  查询支持  MSFTESQL 可处理...

    proteus:生成应用程序数据访问层的简单工具

    除了类型安全之外,Proteus还通过从SQL查询生成预准备语句来防止SQL注入。 甚至动态in子句也将转换为防注入的预备语句。 Proteus不是ORM; 它不会生成SQL。 它只是自动化了与Go中的数据库交互的无聊部分。快速开始...

    Hibernate实战(第2版 中文高清版)

     16.3.3 命令模式的变形   16.4 利用EJB 3.0设计应用程序   16.4.1 利用有状态的bean实现会话   16.4.2 利用EJB编写DAO   16.4.3 利用依赖注入   16.5 测试   16.5.1 理解不同种类的测试   16.5.2 ...

    ASP站长助手6.0

    如想全部显示ID为972的行的content字段的内容,可以这么构造SQL语句: select [content] from [article] where id=972 说明:文件操作使用的是FSO组件,上传使用的是ADODB.STREAM。 ---------------------------...

    javascript网页特效实例大全

    12.2.2 asp中的sql语句 323 12.3 数据库的连接 324 12.3.1 odbc的dsn连接方法 324 12.3.2 odbc的直接连接方法 325 12.3.3 ole db的连接方法 325 12.4 数据库的查询 325 12.4.1 使用connection对象查询数据库 ...

    h_JAVA 2应用编程150例.rar

    实例64 实现SQL语句的检索功能 192 实例65 SQL嵌套检索 194 实例66 获取数据库基本信息 195 第6章 Java C/S结构编程 197 实例67 实现C/S多线程 198 实例68 客户端程序 200 实例69 服务器端程序 201 实例70 C/S结构...

    海量数据库解决方案_韩国_李华植

    《海量数据库解决方案》将整体内容分为两部分: 第1部分中以影响数据读取效率的所有要素为类别,对其各自的概念、原理、 特征、应用准则,以及表的...6.3.7 星变形(star transformation)连接425 6.3.8 位图连接索引436

    海量数据库解决方案_韩国_李华植_Part02

    《海量数据库解决方案》将整体内容分为两部分: 第1部分中以影响数据读取效率的所有要素为类别,对其各自的概念、原理、 特征、应用准则,以及表的...6.3.7 星变形(star transformation)连接425 6.3.8 位图连接索引436

    C#完整教程

    1.6 程序控制语句 23 1.7 类的继承 26 1.8 类的成员 28 1.9 类的字段和属性 28 1.10 类的方法 30 1.11 类的多态性 36 1.12 抽象类和抽象方法 38 1.13 密封类和密封方法 39 1.14 接口 39 1.15 代表 42 1.16 事件 43 ...

    Java范例开发大全 (源程序)

     实例17 如何列出素数 29  实例18 Java中的递归 31  实例19 男生女生各多少人 32  实例20 求水仙花数 34  实例21 求任意一个正数的阶乘 35  实例22 求n的n次方 35  实例23 利用for循环输出几何图形 36 ...

    java范例开发大全(pdf&源码)

    实例17 如何列出素数 29 实例18 Java中的递归 31 实例19 男生女生各多少人 32 实例20 求水仙花数 34 实例21 求任意一个正数的阶乘 35 实例22 求n的n次方 35 实例23 利用for循环输出几何图形 36 实例24 杨辉三角 38 ...

    java范例开发大全源代码

     实例17 如何列出素数 29  实例18 Java中的递归 31  实例19 男生女生各多少人 32  实例20 求水仙花数 34  实例21 求任意一个正数的阶乘 35  实例22 求n的n次方 35  实例23 利用for循环输出几何...

    java范例开发大全

    实例17 如何列出素数 29 实例18 Java中的递归 31 实例19 男生女生各多少人 32 实例20 求水仙花数 34 实例21 求任意一个正数的阶乘 35 实例22 求n的n次方 35 实例23 利用for循环输出几何图形 36 实例24 杨辉三角 38 ...

    java应用软件程序设计

    ODBC桥 180 实例60 使用单独JDBC连接驱动程序 184 实例61 数据库基本操作 185 实例62 使用游标 189 实例63 使用事务 191 实例64 实现SQL语句的检索功能 192 实例65 SQL嵌套检索 194 实例66 ...

    百姓问问答系统 1.5 Beta

    在模版里面SQL语句设置。{g:[email protected]_model='about'} 其中about为标识。添加后在生成静态页设置中添加模板路径和生成静态页路径。单击“点击生成”或“全部生成”按钮即可; 生成静态页设置: 添加您要...

    Java范例开发大全(全书源程序)

    实例17 如何列出素数 29 实例18 Java中的递归 31 实例19 男生女生各多少人 32 实例20 求水仙花数 34 实例21 求任意一个正数的阶乘 35 实例22 求n的n次方 35 实例23 利用for循环输出几何图形 36 实例24 杨辉...

    ZendFramework中文文档

    10.4.2. 同一表中查询多列数据 10.4.3. 多表联合查询 10.4.4. WHERE条件 10.4.5. GROUP BY分句 10.4.6. HAVING 条件 10.4.7. ORDER BY 分句 10.4.8. 通过总数和偏移量进行LIMIT限制 10.4.9. 通过页数和总数...

    arcgis工具

    7. 要素变形 Task 工具条中的reshape feature 配合sketch工具 8. 添加节点 Modify feature 在需要加点的地方右键单击insert vertex 也可单击右键选择properties 打开edit sketch properties对话框,在坐标点位置...

Global site tag (gtag.js) - Google Analytics