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

Oracle--SQL技巧(多行记录用逗号拼接在一起)

阅读更多

需求:

     目前接触BI系统,由于业务系统的交易记录有很多,常常有些主管需要看到所有的记录情况,但是又不想滚动,想一眼就可以看到所有的,于是就想到了字符串拼接的形式。

解决方案:使用Oracle自带的函数 WMSYS.WM_CONCAT,进行拼接。

函数限制:它的输出不能超过4000个字节。

为了不让SQL出错,又可以满足业务的需求,超过4000个字节的部分,使用“。。。”

实现SQL如下:

CREATE TABLE TMP_PRODUCT
(PRODUCT_TYPE VARCHAR2(255),
 PRODUCT_NAME VARCHAR2(255));
 
 
insert into tmp_product
select 'A','ProductA'||rownum from dual
connect by level < 100
union all
select 'B','ProductB'||rownum from dual
connect by level < 300
union all
select 'C','ProductC'||rownum from dual
connect by level < 400
union all
select 'D','ProductD'||rownum from dual
connect by level < 500
union all
select 'E','ProductE'||rownum from dual
connect by level < 600;


SELECT PRODUCT_TYPE,
       WM_CONCAT(PRODUCT_NAME) || MAX(STR) AS PRODUCT_MULTI_NAME
  FROM (SELECT PRODUCT_TYPE,
               PRODUCT_NAME,
               CASE
                 WHEN ALL_SUM > 4000 THEN
                  '...'
                 ELSE
                  NULL
               END AS STR
          FROM (SELECT PRODUCT_TYPE,
                       PRODUCT_NAME,
                       SUM(VSIZE(PRODUCT_NAME || ',')) OVER(PARTITION BY PRODUCT_TYPE) AS ALL_SUM,
                       SUM(VSIZE(PRODUCT_NAME || ',')) OVER(PARTITION BY PRODUCT_TYPE ORDER BY PRODUCT_NAME) AS UP_SUM
                  FROM TMP_PRODUCT)
         WHERE (UP_SUM <= 3998 AND ALL_SUM > 4000)
            OR ALL_SUM <= 4001)
 GROUP BY PRODUCT_TYPE

ref:http://www.cnblogs.com/dctit/archive/2013/01/08/2851967.html

分享到:
评论

相关推荐

    oracle—SQL技巧之(二)WMSYS.WM_CONCAT函数实现多行记录用逗号拼接在一起

    在Oracle数据库中,有时我们需要将多行记录合并成一个单一的字符串,以便于查看或报告。在这种情况下,`WMSYS.WM_CONCAT`函数是一个非常实用的工具,尤其是在处理大量交易记录时,用户希望避免滚动浏览,而是直接...

    sql实现多行合并一行

    在本例中,我们将探讨如何使用纯SQL实现这一功能,特别是针对Oracle数据库。 首先,我们来看一个示例表`m_researcher_stock_rel`,它包含了股票`n_sec_code`和研究员`c_researcher_code`之间的映射关系。由于一只...

    Oracle字段转字符串/多行记录合并/连接/聚合字符串的几种方法

    在Oracle数据库中,有时我们需要将多个字段值转换为单个字符串,或者将多行记录合并成一行,这在数据处理和报告生成时尤其常见。Oracle提供了多种方法来实现这一目标,包括使用内置函数、PL/SQL过程以及一些高级特性...

    oracle实现行转列功能,并使用逗号进行隔开拼接,成为一条数据.pdf

    Oracle 中实现行转列功能,并使用逗号进行隔开拼接,成为一条数据是指将多行数据合并成一行数据,并用逗号分隔每个字段的值。这种功能在实际应用中非常有用,例如在报表生成、数据分析和数据整合等场景中。 在 ...

    oracle查询表的所有列并用逗号隔开

    在Oracle数据库环境中,有时我们需要获取一个表的所有列名,并且以特定格式(如逗号分隔)输出这些列名。这种需求通常出现在多种场景中,比如动态SQL构建、数据迁移或者系统日志记录等。本篇文章将详细介绍如何在...

    oracle 存储过程中某入参是逗号分隔,并且参数要使用在in过滤语句中

    oracle存储过程中入参是逗号分隔,并且参数要使用在in过滤语句中查询数据。处理的方法与实现

    oracle中将列拼接字段函数

    3. **数据汇总**:当需要对某一类别的数据进行汇总时,可以使用该函数将所有相关的记录拼接在一起,便于查看和分析。 #### 注意事项 - `WMSYS.WM_CONCAT`函数可能会导致性能问题,尤其是在处理大量数据时。因此,在...

    Oracle字段根据逗号分割查询数据的方法

    在实际应用中,考虑将这种格式的数据设计为多行记录或者使用其他数据结构(如数组类型)可能会更合适。 总结来说,Oracle字段根据逗号分割查询数据的方法利用了正则表达式和层次查询,提供了灵活且精确的解决方案。...

    SqlUtils工具类,Sql IN 条件拼接工具类

    例如,Oracle支持的`IN`子句可能需要在参数之间添加逗号,而MySQL则不需要。 总之,`SqlUtils`工具类是Java开发中处理SQL查询的利器,它可以简化SQL条件的构建,提升代码质量,降低潜在的安全风险。通过理解和利用...

    sql高级进阶

    标签为“SQL”,意味着所有知识点围绕SQL语言的高级应用和技巧。 在【部分内容】中,提供了一系列具体的SQL高级应用主题,以下是基于这些主题的详细知识点: 1. 单表查询 - 查询表中所有的行与列:使用SELECT * ...

    oracle实现多行合并的方法

    在Oracle数据库中,有时我们需要将同一列中的多个行值合并为单行文本,这在处理汇总数据或报告时尤其有用。Oracle提供了一种方便的方法来实现这一目标,特别是在Oracle 10g及更高版本中引入的`WMSYS.WM_CONCAT`函数...

    sql语法(oracle,mysql,sqlserver)

    根据给定的信息,我们可以深入探讨SQL中的多表查询技术,特别是针对Oracle、MySQL以及SQL Server数据库系统的应用。这里我们将重点放在几个关键的概念上:笛卡尔积、连接(Join)的不同类型,尤其是内连接(Inner ...

    SQL中in参数化的用法

    在 SQL 中,对于 IN 操作符的使用是非常常见的,特别是在 WHERE 子句中规定多个值时。如:select * from A where ID in (1,2,3,4)。但是在实际开发中,我们不可避免地需要处理大量的数据,传统的方法是直接将参数...

    DB2 SQL 实现行转列,列转行

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

    Oracle中SQL语句连接字符串的符号使用介绍

    在Oracle数据库中,SQL语句连接字符串的主要符号是双竖线 `||`,它用于将两个或多个字符串拼接在一起。这个操作符的功能类似于其他数据库系统中的 `CONCAT` 函数,但更简洁且易于使用。以下是对Oracle中SQL语句连接...

    Oracle 两个逗号分割的字符串,获取交集、差集(sql实现过程解析)

    Oracle数据库的两个字段值为逗号分割的字符串,例如:字段A值为“1,2,3,5”,字段B为“2”。 想获取两个字段的交集(相同值)2,获取两个字段的差集(差异值)1,3,5。 一、最终实现的sql语句 1、获取交集(相同值)...

    Oracle SQL 语句学习

    在Oracle SQL中,主要的SQL语句可以分为四类:数据处理语言(DML)、数据定义语言(DDL)、事务控制和数据控制语言(DCL)。DML语句包括SELECT、INSERT、UPDATE、DELETE、MERGE等,用于数据行的查询、插入、修改和...

    oracle数据库的表数据导出为csv文件

    本文将详细介绍如何使用Oracle PL/SQL来实现这一功能。 #### 二、PL/SQL过程编写 首先,通过提供的部分代码片段可以看出,该过程主要通过定义一个存储过程(`TOTXT`)来实现将表数据导出至CSV文件的功能。下面是对...

Global site tag (gtag.js) - Google Analytics