草庐IT

关于sql:Transpose String column values to Row Oracle

codeneng 2023-03-28 原文

Transpose String colomn values to Row Oracle

我的初始表是这样的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
CREATE TABLE pivot_string ( col1 NUMBER, col2 NUMBER, col3 VARCHAR2(6),
 col3_id NUMBER, col3_desc VARCHAR2(10) ) ;
 INSERT INTO pivot_string SELECT 123, 9875,'RO', 40, 'Roma' FROM dual;
 INSERT INTO pivot_string SELECT 123, 9875,'IT', 40, 'iteration' FROM dual;
 INSERT INTO pivot_string SELECT 123, 9875,'US', 78, 'world' FROM dual;
 INSERT INTO pivot_string SELECT 123, 9875,'WE', 56, 'WHAT' FROM dual;
 COMMIT;
 SELECT * FROM pivot_string;
 -- INSERT INTO pivot_string SELECT 123, 4875,'RO', 55, 'Roma' FROM dual;
 --INSERT INTO pivot_string SELECT 124, 4875,'RO', 44, 'Roma' FROM dual;

 TABLE: pivot_string'
------------------------------------------
col1 |  col2 | col3 | col3_id | col3_desc
-----------------------------------------
123  |  9875 | '
RO' |   40    | 'Roma'
123  |  9875 | '
IT' |   50    | 'iteration'
123  |  9875 | '
US' |   78    | 'world'
123  |  9875 | '
WE' |   56    | 'WHAT'

Excepted- pivot_string
--------------------------------------------------------------------------
col1 |  col2 | ro | ro_desc | it | it_desc     | us | us_desc | we | we_desc
---------------------------------------------------------------------------
123  |  9875 | 40 |  '
Roma' | 50 | 'iteration' | 78 | 'world' | 56 | 'WHAT'

我的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
WITH mytest AS(  
SELECT a.col1, a.col2, a.col3,a.col3_id, a.col3_desc
FROM pivot_string a
   )
 SELECT COALESCE(RO.col1,IT.col1, US.col1, WE.col1)col1,  
   COALESCE(RO.col2,IT.col2, US.col2, WE.col2) col2,
   RO,RO_desc IT,IT_desc, US,US_desc, WE, WE_desc
  FROM(

  (SELECT col1,col2, col3_id RO, col3_desc RO_desc FROM mytest WHERE col3 =
 'RO' )RO
  LEFT JOIN (SELECT col1,col2, col3_id IT, col3_desc IT_desc FROM mytest
  WHERE col3 = 'IT' )  IT
       ON(RO.col1 =IT.col1 AND RO.col2 = IT.col2)
   LEFT JOIN ( SELECT col1,col2, col3_id US, col3_desc US_desc FROM mytest
   WHERE col3 = 'US' )US
      ON(RO.col1 =US.col1 AND RO.col2 = US.col2)
    LEFT JOIN (SELECT col1,col2, col3_id WE, col3_desc WE_desc FROM mytest
      WHERE col3 = 'WE') WE
      ON(RO.col1 =WE.col1 AND RO.col2 = WE.col2)
    ) ;

我解决这个问题的方法不好,因为 col3 有超过 100 个不同的值。
所以像我一样左加入所有肯定不是正确的方法。
由于 col3 和 col3_desc,我不能使用 pivot。它们的类型是 Varchar2

有人知道解决此类问题的更好方法吗?


我前几天看到类似的问题。您可以在 PIVOT 中添加多个聚合函数。检查以下查询:

1
2
3
4
5
6
7
SELECT * FROM (
SELECT * FROM pivot_string
) PIVOT
(
  SUM(COL3_ID) AS id,MIN(COL3_DESC) AS descp
  FOR col3 IN ('RO' AS RO, 'IT' AS IT, 'US' AS US, 'WE' AS WE)
 );

参考:
在 Oracle 行的多个列上使用数据透视

SQL FIDDLE

  • 谢谢你的最小值(COL3_DESC)。这似乎是正确的解决方案——我正在测试我的数据

有关关于sql:Transpose String column values to Row Oracle的更多相关文章

  1. Hive SQL 五大经典面试题 - 2

    目录第1题连续问题分析:解法:第2题分组问题分析:解法:第3题间隔连续问题分析:解法:第4题打折日期交叉问题分析:解法:第5题同时在线问题分析:解法:第1题连续问题如下数据为蚂蚁森林中用户领取的减少碳排放量iddtlowcarbon10012021-12-1212310022021-12-124510012021-12-134310012021-12-134510012021-12-132310022021-12-144510012021-12-1423010022021-12-154510012021-12-1523.......找出连续3天及以上减少碳排放量在100以上的用户分析:遇到这类

  2. sql - 查询忽略时间戳日期的时间范围 - 2

    我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时

  3. ruby-on-rails - 关于 Ruby 的一般问题 - 2

    我在我的rails应用程序中安装了来自github.com的acts_as_versioned插件,但有一段代码我不完全理解,我希望有人能帮我解决这个问题class_eval我知道block内的方法(或任何它是什么)被定义为类内的实例方法,但我在插件的任何地方都找不到定义为常量的CLASS_METHODS,而且我也不确定是什么here,并且有问题的代码从lib/acts_as_versioned.rb的第199行开始。如果有人愿意告诉我这里的内幕,我将不胜感激。谢谢-C 最佳答案 这是一个异端。http://en.wikipedia

  4. sql - 在 Rails Console for PostgreSQL 的表中显示数据 - 2

    我找到了这样的东西:Rails:Howtolistdatabasetables/objectsusingtheRailsconsole?这一行没问题:ActiveRecord::Base.connection.tables并返回所有表但是ActiveRecord::Base.connection.table_structure("users")产生错误:ActiveRecord::Base.connection.table_structure("projects")我认为table_structure不是Postgres方法。如何列出Postgres数据库的Rails控制台中表中的所有

  5. ruby - 防止SQL注入(inject)/好的Ruby方法 - 2

    Ruby中防止SQL注入(inject)的好方法是什么? 最佳答案 直接使用ruby?使用准备好的语句:require'mysql'db=Mysql.new('localhost','user','password','database')statement=db.prepare"SELECT*FROMtableWHEREfield=?"statement.execute'value'statement.fetchstatement.close 关于ruby-防止SQL注入(inject

  6. ruby - 我怎样才能更好地了解/了解更多关于 Ruby 的知识? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?

  7. ruby - 关于 Ruby 中 Dir[] 和 File.join() 的混淆 - 2

    我在Ruby中遇到了一个关于Dir[]和File.join()的简单程序,blobs_dir='/path/to/dir'Dir[File.join(blobs_dir,"**","*")].eachdo|file|FileUtils.rm_rf(file)ifFile.symlink?(file)我有两个困惑:首先,File.join(@blobs_dir,"**","*")中的第二个和第三个参数是什么意思?其次,Dir[]在Ruby中有什么用?我只知道它等价于Dir.glob(),但是,我对Dir.glob()确实不是很清楚。 最佳答案

  8. ruby-on-rails - 如何在 Rails 中的不同数据库上执行直接 SQL 代码 - 2

    我正在编写一个Rails应用程序,它将监视某些特定数据库的数据质量。为了做到这一点,我需要能够对这些数据库执行直接SQL查询——这当然与用于驱动Rails应用程序模型的数据库不同。简而言之,这意味着我无法使用通过ActiveRecord基础连接的技巧。我需要连接的数据库在设计时是未知的(即:我不能将它们的详细信息放在database.yaml中)。相反,我有一个模型“database_details”,用户将使用它来输入应用程序将在运行时执行查询的数据库的详细信息。因此与这些数据库的连接实际上是动态的,细节仅在运行时解析。 最佳答案

  9. elasticsearch源码关于TransportSearchAction【阶段三】 - 2

    1.回顾.TransportServicepublicclassTransportServiceextendsAbstractLifecycleComponentTransportService:方法:1publicfinalTextendsTransportResponse>voidsendRequest(finalTransport.Connectionconnection,finalStringaction,finalTransportRequestrequest,finalTransportRequestOptionsoptions,TransportResponseHandlerT>

  10. 关于Qt程序打包后运行库依赖的常见问题分析及解决方法 - 2

    目录一.大致如下常见问题:(1)找不到程序所依赖的Qt库version`Qt_5'notfound(requiredby(2)CouldnotLoadtheQtplatformplugin"xcb"in""eventhoughitwasfound(3)打包到在不同的linux系统下,或者打包到高版本的相同系统下,运行程序时,直接提示段错误即segmentationfault,或者Illegalinstruction(coredumped)非法指令(4)ldd应用程序或者库,查看运行所依赖的库时,直接报段错误二.问题逐个分析,得出解决方法:(1)找不到程序所依赖的Qt库version`Qt_5'

随机推荐