`
bigfirebird
  • 浏览: 128887 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[分享]SQL列转行

阅读更多
在做一些视图,报表或者查询的时候,列转行是必须要做的,甚至有多列要转。
SQLSERVER中实现 基本思路是这样的
1  查出所需要数据放在视图1中,且在同一行中将第一次要转的字符串拼成1个长字符串;用+,相当于ORC的||
2  创建一个合并函数1 ,作用是动态SQL将在视图1中同一列中满足条件的字符串再拼成一个长字符串
3  调用这个合并函数1,将第一次列转行的数据存成视图2,同时也可将第二次列转行的同一行中要转的字符串拼成1个长字符串
4  创建一个合并函数2 ,作用是动态SQL将在视图1中同一列中满足条件的字符串再拼成一个长字符串
5  调用这个合并函数1,将第一次列转行的数据存成视图3...
以此类推...
注意:如果数据中有空值得话,用函数转换的时候会报substring 传递值错误。所以对于有空置的列,需要用isnull 判断赋值


可能上面的描述有点拗口,其实对于  SQL多列转行,先可以对现有数据分成几个大列,每次写一个合并函数,对其中的一个大列进行列转行操作。
操作后的数据,再针对其写第二个合并函数,继续对另外的大列进行列转行。直到满足要求为止。
我所找到的办法 基本思路就是这样了,感觉貌似是个笨办法。
很久没碰ORC了,不知道ORC有没有更好的办法。



上段代码,举个小例

--sql server 2000中的写法.
create table tb(name varchar(10), work varchar(10), startime int, endtime int , remark varchar(20))
_insert into tb values('张三', '程序员' , 1 , 3,'小伙子不错')
_insert into tb values('张三', '程序员' , 2 , null,'小伙子不错')
_insert into tb values('张三', '程序员' , 3 , null,'小伙子不错')
_insert into tb values('李四', '项目经理', 5 , null,'有前途')
_insert into tb values('李四', '项目经理', 7 , 10,'有前途')
_insert into tb values('王五', '技术总监', 10, null,'真棒')
go
--创建一个合并的函数
create function f_hb(@name varchar(10),@work varchar(10), @remark varchar(20))
returns varchar(8000)
as
begin
  _declare @str varchar(8000)
  set @str = ''
  _select @str = @str + ',' + cast(time as varchar) from
  (
    _select name,work,remark,time = case when endtime is not null then cast(startime as varchar) + '-' + cast(endtime as varchar) else cast(startime as varchar) end from tb
  ) t
  where name = @name and work = @work and remark = @remark
  set @str = right(@str , len(@str) - 1)
  return(@str)
End
go
--调用自定义函数得到结果:
_select distinct name ,work ,remark ,dbo.f_hb(name ,work ,remark) as time from tb
/*
name       work       remark               time
---------- ---------- -------------------- ------------------
李四         项目经理       有前途                  5,7-10
王五         技术总监       真棒                   10
张三         程序员        小伙子不错                1-3,2,3
分享到:
评论

相关推荐

    sql列转行以及行转列的通用存储过程

    根据提供的标题、描述、标签及部分内容,本文将详细介绍SQL中实现列转行及行转列通用存储过程的具体方法,特别是针对Microsoft SQL Server版本的应用场景。 ### 标题解析:SQL列转行及行转列的通用存储过程 该标题...

    (SQL)列转行工具

    可以把一列转成一行…… 分隔符默认为英文逗号,也可以转成INSERT 中VALUES()后面的单引号加逗号...以前用T-SQL时,总是把一列复制到EXCEL中,转置,然后复制到记本事中,把一空格替换成逗号……,这个工具可以直接搞定

    DB2 SQL 实现行转列,列转行

    DB2 SQL 通过函数(CONCAT/POSSTR/LOCATE)实现行转列,列转行 可以按照标点把多列转换为一行,多行转换为一列

    SQL行专列列转行存储过程

    SQL行专列列转行的存储过程 很实用的 SQL行专列列转行的存储过程 很实用的

    Sql语句实现表的行列转换,行转列,列转行

    ### SQL语句实现表的行列转换,行转列,列转行 在处理数据库时,我们经常需要对数据进行各种变换以适应不同的分析需求。其中,“行列转换”就是一种非常实用的功能,它可以帮助我们将表中的行数据转换为列数据,...

    SQL Server 列转行代码

    SQL Server 列转行代码,供大伙参考

    SqlServer行转列和列转行

    SqlServer如何进行行转列和列转行方法

    sql2005列转行存储过程代码

    在本案例中,我们将详细探讨如何在SQL Server 2005中进行列转行的操作,特别是通过存储过程来实现。 首先,列转行通常用于处理具有固定列数但列名可能变化的数据。例如,你可能有一个表,其中每个月的销售数据存储...

    SqlServer列转行的另一种方式

    ### SqlServer列转行的另一种方式 在数据库处理过程中,经常需要将数据按照特定的方式进行转换,以便更好地满足业务需求或提高查询效率。常见的转换包括列转行、行转列等操作。通常我们使用`PIVOT`和`UNPIVOT`来...

    sql行转列,与列转行

    sql 行转列 与列转行,oracle ,msssql等,详细数据库操作方法,各种例子,欢迎大家学习。、~

    Mysql 行转列,列转行 SQL语句和示例表结构SQL

    MySQL 虽然没有内置的行转列和列转行函数,但通过 CASE、GROUP_CONCAT、UNION ALL 和 JOIN 等 SQL 语句,我们可以灵活地对数据进行转换,满足不同的数据分析需求。在实际应用中,应根据数据的特性和业务需求选择合适...

    sqlserver使用UNPIVOT函数列转行

    ### SQL Server 使用 UNPIVOT 函数实现列转行 #### 概述 在 SQL Server 中,`UNPIVOT` 函数是一个非常实用的功能,主要用于将数据表中的列转换为行,即“列转行”操作。这种操作在数据分析过程中经常用到,尤其是...

    sql行转列_列转行问题.

    其中,“行转列”与“列转行”是SQL处理数据时常见的需求,用于改变数据的展示形式,使之更符合特定的分析或展示要求。本文将基于给定的文件信息,深入探讨SQL中的行转列和列转行问题,通过具体的案例分析,帮助读者...

    精典的SQL语句。行转列,列转行的语句

    精典的SQL语句,行转列,列转行的语句 本文共分六个部分,分别讨论精典的SQL语句,行转列,列转行的语句,行列转换、取得数据表的所有列名、更改用户密码、判断表的哪些字段不允许为空、找到含有相同字段的表六个...

    SQL中如何实现行转列,列转行的操作

    在SQL中,行转列和列转行是数据处理中常见的需求,特别是在数据分析和报表制作时。这些操作可以通过多种方式实现,例如使用`CASE WHEN`语句、`PIVOT`和`UNPIVOT`运算符。让我们深入探讨一下这些方法。 1. **行转列*...

    行转列sql_server

    sql server 用于行转列,省得各位去找语句,select to_char(wm_concat('''' || valuelabel || '''')) name from (select distinct t.valuelabel from structuredrecruit t) select * from (select t.uhid, t....

    sql列数不固定查询语句

    ### SQL列数不固定的查询语句解析与应用 #### 核心知识点概述 在SQL查询中,有时会遇到数据表的列数不固定的情况,即数据表中的某些列可能存在或缺失,这通常发生在需要根据不同的条件对数据进行聚合或者分组的...

    HANA SQL参考手册

    ### HANA SQL参考手册知识点概览 #### 一、引言 HANA SQL参考手册是为SAP HANA数据库设计的全面指南,旨在提供关于如何使用SQL语言与HANA进行交互的所有必要信息。该手册覆盖了从基本概念到高级主题的各种内容,...

    SQL知识点之列转行Unpivot函数

    在本篇文章中,我们将深入探讨SQL的Unpivot函数,以及如何使用它来实现列转行的操作。 首先,让我们回顾一下上一篇文章中提到的Pivot函数。Pivot函数是用于将数据的行转换为列,通常用于数据透视或汇总,使得特定的...

    sqlserver 实现 行转列 split 分割的函数

    sqlserver 实现 行转列 split 分割的函数,具体使用方法写有在文件里。

Global site tag (gtag.js) - Google Analytics