首页 > 数据库 >SQL SERVER/ORACLE 将ID串列转换为多行的写法

SQL SERVER/ORACLE 将ID串列转换为多行的写法

时间:2022-09-19 10:02:23浏览次数:85  
标签:多行 串列 AttributeValue number SERVER SQL ID

SQL SERVER 将ID串列转换为多行的写法:
select distinct a.employeeid as MANAGEREMPLOYEEID
  , CAST(SUBSTRING(a.AttributeValue,number,CHARINDEX(',',a.AttributeValue+',',number)-number) AS INT) as MEMBEREMPLOYEEID
from dbo.tbEmployeeAttribute a, master..spt_values
where number >= 1 
  and number < len(a.AttributeValue)
  and a.AttributeFlag = 15
  and SUBSTRING(','+a.AttributeValue,number,1) = ',';
原表数据:
0 执行结果如下: 0   ORACLE 将ID串列转换为多行的写法:
CREATE OR REPLACE VIEW ROLE.TEAMEMEMBER AS
SELECT a.employeeid MANAGEREMPLOYEEID, b.column_value MEMBEREMPLOYEEID
FROM role.employeeattribute a
     , table(CONCEPT.fnIDInString(a.attributevalue,',')) b
WHERE a.attributecode = 15;
原表数据: 0 SQL执行转换之后: 0   附录:CONCEPT.fnIDInString 自定义函数
CREATE OR REPLACE FUNCTION CONCEPT.fnIDInString(p_string IN VARCHAR2, p_delimiter IN VARCHAR2)
    RETURN  type_str_split  
    PIPELINED
AS
    v_length   NUMBER := LENGTH(p_string);
    v_start    NUMBER := 1;
    v_index    NUMBER;
BEGIN
    WHILE(v_start <= v_length)
    LOOP
        v_index := INSTR(p_string, p_delimiter, v_start);

        IF v_index = 0
        THEN
            PIPE ROW(SUBSTR(p_string, v_start));
            v_start := v_length + 1;
        ELSE
            PIPE ROW(SUBSTR(p_string, v_start, v_index - v_start));
            v_start := v_index + 1;
        END IF;
    END LOOP;

    RETURN;
END ;

 

标签:多行,串列,AttributeValue,number,SERVER,SQL,ID
From: https://www.cnblogs.com/chriskwok/p/16706716.html

相关文章

  • 45. SQLite
    45.SQLite45.1SQLite介绍SQLite关系型数据库。嵌入式的数据库,体积小,功能强大,几十kb。在Android平台上,集成了一个嵌入式关系型数据库—SQLite,SQLite3支持NULL、INTEGER......
  • MySQL事务以及存储引擎
    MySQL事务以及存储引擎一、事务1.事务的概念●事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即......
  • MySQL日志管理、备份与恢复
    MySQL日志管理、备份与恢复一、MySQL日志管理1.MySQL日志路径MySQL的日志默认保存位置为/usr/local/mysql/data2.设置、修改日志路径MySQL日志路径可在MySQL配置文......
  • SQLServer第九章:视图与索引
    视图:查看来自于一个或多个列的列的集合,一张虚拟表,视图中并不存放任意数据,只存放select语句 查看视图最基本的代码:select*from表名返回一个虚拟表索引:提高查......
  • luasql报错笔记
    luasql编译安装查看mysql配置,注意lmysqlclient路径[root@hmyluasql-master]#mysql_configUsage:/usr/bin/mysql_config[OPTIONS]Options:--cflags......
  • MySQL日志——二进制日志
    MySQL二进制日志的概念:二进制日志采用二进制格式(01)来存储日志信息(导致数据发生变化的SQL语句),二进制日志记录整个数据库的修改过程。MySQL的二进制日志主要就是起一个......
  • CentOS 7国内镜像yum安装mysql5.7
    一、检查MySQL环境是否已存在rpm-qa| grep mysqlrpm-qa|grepmariadb>>我这里要卸载mariadb(假如你发现类似的就和我一样删除就好了):yum removemariadb-libs-5.......
  • 记一次sql优化
    目录记一次sql优化记一次sql优化总数据70w原sql--优化前SELECTCOUNT(CASEWHENBUREAU_TASK='0'ANDDECLARE_PERSON_ID='bfa800bd0000000014e1beec0000000......
  • linux安装mysql
    原文链接:https://blog.csdn.net/m0_54849806/article/details/126113296在Linux系统安装MySQL8.0,网上已经有很多的教程了,到自己安装的时候却发现各种各样的问题,现在把安装......
  • MySQL 优化篇(二)
    分析查询语句:EXPLAIN定位了查询慢的SQL之后,我们就可以使用EXPLAIN或DESCRIBE工具做针对性的分析查询语句。DESCRIBE语句的使用方法与EXPLAIN语句是一样的,并且分析结果也......