`
zzhonghe
  • 浏览: 248239 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Mysql中模拟rownum完成行列转换

    博客分类:
  • DB
阅读更多


环境:
create table  ff(f1 varcahr(10), f2 int);

insert into ff values ('A', round(rand()*100));
insert into ff values ('A', round(rand()*100));
insert into ff values ('A', round(rand()*100));


需要执行一条SQL语句得到一行记录   'A' ,  '98,44,55'



语句:

set @row:=0;

select tmp.f1, concat(max(tmp.a),',',max(tmp.b),',',max(tmp.c)) as 'all'
from (

select
        @row:=@row+1,
        f1,
        case when @row=1 then f2 else 0 end as a,
        case when @row=2 then f2 else 0 end as b,
        case when @row=3 then f2 else 0 end as c
from ff group by @row 
)
as tmp group by tmp.f1;

思路:

这个是典型的行转列,然后再concat连成字符串

step1: 在表上添加rowId
select @row:=@row+1, f1,f2 from ff;


step2: 对rowId进行分组
select @row:=@row+1, f1,f2 from ff group by @row

step3: 添加以后用来合成的目标列
select @row:=@row+1, f1,0 as a, 0 as b, 0 as c from ff group by @row

step4: 对于rowid=1的分组, a列取f2值, b,c都是0;  对于rowId=2的分组, a,c列取0, b取f2的值...   这里的case when就是行转列的法宝
select
        @row:=@row+1,
        f1,
        case when @row=1 then f2 else 0 end as a,
        case when @row=2 then f2 else 0 end as b,
        case when @row=3 then f2 else 0 end as c
from ff group by @row 

step5: 最后再取max,并且concat




分享到:
评论

相关推荐

    mysql实现rownum和上一条,下一条功能

    1.或许有的人会用id+limit来实现上一条,下一条功能.但是.我们试想一下.有的业务并不是用id来排序的.那这样的方法就没效果...2.现在找到了生成rownum的方法,并且优化了执行速度. 3.直接上我项目里的sql,希望对大家有用.

    mysql类似oracle rownum写法实例详解

    同样地,如果你想在 MySQL 中模拟 Oracle 的分页查询,Oracle 原版写法如下: ```sql SELECT * FROM ( SELECT id, name FROM t ) WHERE ROWNUM (num); ``` 在 MySQL 中,你可以使用以下方式实现: ```sql SET @...

    sql语句中select top n与oracle的rownum与mysql的limit用法

    sql语句中select top n与oracle的rownum与mysql的limit 取前几条数据sql简单用法

    Oracle Sql语句转换成Mysql Sql语句

    1. **数据类型**:Oracle支持的数据类型如NUMBER、LONG、RAW等在MySQL中可能需要转换为DECIMAL、TEXT或BLOB。例如,Oracle的NUMBER可以转换为MySQL的DECIMAL或FLOAT,LONG可以转换为TEXT。 2. **分页查询**:Oracle...

    ORACLE 中ROWNUM用法总结

    在Oracle数据库中,`ROWNUM`是一个非常有用的伪列,用于限制查询结果的行数,尤其是在处理大数据量或进行分页查询时。然而,`ROWNUM`的使用并不直观,尤其是当涉及到比较运算符(如`>`, `>=`, `=`等)时,容易引发...

    Mysql转oracle工具

    例如,MySQL支持的`LIMIT`在Oracle中需用`ROWNUM`或`FETCH FIRST`来实现分页;MySQL的`INFORMATION_SCHEMA`在Oracle中对应的是`DBA_`或`USER_`视图;此外,存储过程、触发器和函数的语法也有区别。 2. **数据类型...

    C# Mysql 查询 Rownum的解决方法

    在MySQL中,我们可以利用变量来模拟Rownum的效果。在提供的示例代码中,使用了一个用户定义的变量`@rownum`来计算行号。以下是具体的SQL查询语句: ```sql SELECT @rownum:=@rownum+1 AS rownum, a.order_id, ...

    ROWNUM的使用技巧

    ROWNUM 是 Oracle 中的一种伪列,它可以根据返回记录生成一个序列化的数字。利用 ROWNUM,我们可以生产一些原先难以实现的结果输出,但是因为它是伪列的特殊性,在使用时需要注意一些事项,以免掉入“陷阱”。 特殊...

    用Distinct在MySQL中查询多条不重复记录值,绝对的物有所值

    在IT行业的数据库管理与开发领域,SQL语言是不可或缺的一部分,尤其在关系型数据库如MySQL中,其作用更是举足轻重。今天,我们将深入探讨如何使用`DISTINCT`关键字在MySQL中查询多条不重复记录值,这不仅是一种实用...

    oracle rownum 的使用 和sqlserver有区别的!

    本文将详细介绍 Oracle 中 ROWNUM 的使用方法,并与 SQL Server 中相应的功能进行对比分析。 #### Oracle ROWNUM 基础用法 1. **ROWNUM 的默认行为:** - 在 Oracle 中,ROWNUM 默认从 1 开始计数,对于每一行...

    Oracle中rownum的使用

    Oracle中rownum的使用

    对于 Oracle 的 rownum 问题

    可如果用 select rownum,c1 from t1 where rownum > 10 (如果写下这样的查询语句,这时候在您的头脑中应该是想得到表中后面10条记录),你就会发现,显示出来的结果要让您失望了,也许您还会怀疑是不谁删了一些记录,...

    mysql-oracle数据转换工具

    例如,MySQL中的LIMIT关键字用于分页,而Oracle使用ROWNUM;MySQL的JOIN语法相对简单,Oracle则有更灵活的连接方式。 3. 数据类型:MySQL和Oracle支持的数据类型有所不同,比如MySQL有ENUM和SET类型,Oracle有BFILE...

    oracle中利用关键字rownum查询前20名员工信息及rownum用法

    注意:对 rownum(伪列) 只能使用 < 或 <=, 而用 =, >, >= 都将不能返回任何数据  例:查询工资前20名的员工姓名,工资 ,工资由高到低 Select rownum,first_name,salary from (Select first_name, salary ...

    Oracle到mysql转换的问题总结.doc

    - 类型转换:Oracle的`TO_CHAR`和`TO_NUMBER`在MySQL中可能用`CONVERT`函数完成。 - `DECODE()`函数:在MySQL中可用`CASE WHEN`表达式替换,如`SELECT CASE WHEN a=b THEN c ELSE d END AS col1 FROM table1;` - ...

    rownum用法(不使用minus)

    `rownum` 是 Oracle 数据库中的一个特殊字段,主要用于给查询结果集中的每一行分配一个唯一的序号,该序号从 1 开始递增。`rownum` 的主要用途之一是用于实现分页查询,即控制查询结果的数量。 #### 二、rownum与...

    oracle rownum和distinct

    "Oracle 中的 ROWNUM 和 DISTINCT" Oracle 中的 ROWNUM 和 DISTINCT 是两个非常重要的关键词,它们在查询数据时发挥着至关重要的作用。然而,许多开发者在使用这两个关键词时,却常常会遇到一些不太理解的地方,...

    mysql转换到oracle数据库

    - **去除特殊符号**:如MySQL中的反引号(``)需要被移除。 - **数据类型转换**: - `text`类型的字段转换为`varchar2(4000)`。 - `varchar`转换为`varchar2`。 - `tinyint(1)`变为`number(1)`。 - `int(4)`变为...

    oracle中rownum的用法

    ### Oracle中的ROWNUM使用详解 #### 一、ROWNUM简介 在Oracle数据库中,`ROWNUM`是一个非常有用的伪列,它为查询结果中的每一行分配一个唯一的行号。这个行号从1开始,每增加一行,行号就递增1。`ROWNUM`对于数据...

    oracle中rownum的用法及解说

    ### Oracle中的ROWNUM使用详解 在Oracle数据库中,`ROWNUM`是一个非常有用的伪列,它可以帮助用户在查询结果集中为每一行分配一个唯一的行号。`ROWNUM`的值从1开始,并随着行的增加而递增。下面将详细介绍`ROWNUM`...

Global site tag (gtag.js) - Google Analytics