`
longgangbai
  • 浏览: 7331572 次
  • 性别: 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

分享到:
评论

相关推荐

    导出系列-根据SQL语句导出数据到txt记事本

    "导出系列-根据SQL语句导出数据到txt记事本"这个主题聚焦于如何使用SQL语句将数据库中的信息转化为文本文件格式,特别是TXT或记事本格式。这种格式简单易读,适用于多种场景,如数据共享、日志记录或是作为其他程序...

    SQL注入攻击及其防范浅谈

    攻击者可以通过构造特殊的输入,使得原本的SQL语句变形,执行恶意的数据库操作。例如,如果一个登录界面的SQL查询是"SELECT * FROM users WHERE username='$username' AND password='$password'",攻击者可能会输入...

    SQL防止注入,很经典得

    1. 原理:当用户输入的数据直接被用于构造SQL语句而未进行充分验证时,攻击者可以输入恶意SQL片段,使得原本的查询语句变形,执行非预期的操作。例如,一个简单的登录界面可能只检查用户名和密码,若未过滤特殊字符...

    SQL参数化修改在实测类成果数据入库中的应用.pdf

    在数据库操作中,SQL语句的编写和执行是一个重要环节,特别是在数据量庞大且格式多样的情况下,拼接SQL语句很容易变得复杂且难以阅读,同时增加了出错的可能性。因此,SQL参数化修改的实践应用变得尤为重要。参数化...

    一种基于ASP.NET的SQL注入漏洞防范措施.pdf

    这种做法可以有效避免因用户输入导致的SQL语句逻辑变形,从而避免注入攻击的发生。 在此之前,常见的防范SQL注入漏洞的手段有三种,分别是字符串检测、字符串替换和使用存储过程。字符串检测法要求用户输入必须只...

    论文研究-基于机器学习的SQL注入检测技术研究 .pdf

    传统的SQL注入防护措施,如正则表达式匹配,虽然在一定范围内有效,但随着攻击手法的不断进化,尤其是对变形SQL注入的防护,这类方法越来越显得力不从心。攻击者会使用各种技术手段,例如编码、注释、SQL关键字替换...

    SQLi Labs实验指导书

    - **后台SQL语句分析**:分析错误信息,推断出后台SQL语句中可能存在单引号变形的情况。 - **构造注入语句**:根据变形情况构造对应的SQL注入代码。 #### 6. SQL注入技巧与方法 - **单引号测试**:通常用于探测字符...

    SOS,asp表格变形,请高手帮忙

    代码中通过设置SQL语句来查询数据库中的`product`表,如果`request("bclass")`有值,则根据该值进行条件查询;否则,查询所有数据。这种动态构建SQL语句的方式虽然灵活,但也存在SQL注入的风险,应确保对`request`中...

    MS Sql 2005 全文索引

    #### 14.8 2005 新增:与全文索引相关的 T-SQL 语句 - **14.8.1 创建全文目录**:使用 `CREATE FULLTEXT CATALOG` 语句创建全文目录。 - **14.8.2 更改全文目录属性**:使用 `ALTER FULLTEXT CATALOG` 语句修改已...

    基于SQL Server平台复杂地质体FLAC^(3D)模型的构建.pdf

    然后,利用SQL语言编写SQL select语句来生成FLAC^(3D)的模型数据文件。这一过程的核心在于自动化地准确、快速地构建复杂的三维地质模型。为了实现这一点,研究者们提出了一种新的建模方法,这种建模方法不仅提高了...

    Web应用安全:使用SQL注入绕过方法文本.docx

    其中,SQL注入是最常见的安全威胁之一,它利用Web应用程序中存在的漏洞向数据库发送恶意SQL语句,从而获取非法数据访问权限。为了有效地防范SQL注入攻击,了解其绕过方法至关重要。本文将详细介绍几种常见的SQL注入...

    计算机毕业设计 学生课绩管理系统 jsp + servlet + javaBean + sql-server- JAVA程序源码

    在这个系统中,SQL Server可能存储了学生的个人信息、课程信息、成绩记录等,通过SQL语句进行增删改查操作。 5. **Web应用架构**:项目的三层架构模式(表现层、业务逻辑层、数据访问层)是典型的MVC(Model-View-...

    SQLSERVER全文目录全文索引的使用方法和区别讲解

    1. 创建全文目录:这是启用全文索引的第一步,可以通过SQL Server Management Studio (SSMS)图形界面或者使用Transact-SQL语句来完成。 2. 填充全文索引:在创建了全文目录后,需要将数据表中的数据导入到全文目录中...

    大坝变形监测系统软件设计

    - **数据库存储过程**:存储过程是一组SQL语句的预编译集合,它们存储在数据库服务器上,可以在客户端通过简单的调用命令来执行。通过使用存储过程,可以减少网络传输量,提高数据处理速度,同时增强系统的安全性。 ...

    10 种方法绕过云锁以及tamber

    Tamper脚本使用正则表达式匹配并替换SQL语句中的内容,以适应不同类型的绕过策略。 总的来说,这些绕过方法显示了在面对有漏洞的云锁时,攻击者可能采取的策略,同时也提醒了网站管理员和安全从业者注意云锁的局限...

Global site tag (gtag.js) - Google Analytics