Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL查询(oracle)中将行转换为列_Sql_Oracle - Fatal编程技术网

在SQL查询(oracle)中将行转换为列

在SQL查询(oracle)中将行转换为列,sql,oracle,Sql,Oracle,我不知道写报告来显示以下结果,请协助。非常感谢 这就是我的DB表的样子 这就是我想在报告中展示的内容 注意:标记1、2、3不是固定的。有时会出现备注4、备注5等。如何使用标准sql语法在任何数据库(支持分析)上透视/转换/交叉表数据,尽管我也认为您的备注可以是任何文本: SELECT invoiceno, MAX(case when rn = 1 then remark end) as remark1, MAX(case when rn = 2 then remark end)

我不知道写报告来显示以下结果,请协助。非常感谢

这就是我的DB表的样子

这就是我想在报告中展示的内容


注意:标记1、2、3不是固定的。有时会出现备注4、备注5等。

如何使用标准sql语法在任何数据库(支持分析)上透视/转换/交叉表数据,尽管我也认为您的备注可以是任何文本:

SELECT 
  invoiceno,
  MAX(case when rn = 1 then remark end) as remark1,
  MAX(case when rn = 2 then remark end) as remark2,
  MAX(case when rn = 3 then remark end) as remark3/*,

    --add as many lines as you need columns
    MAX(case when rn = X  then remark end) as remarkX
  */
FROM
  (SELECT invoiceno, remark, row_number() over(partition by invoiceno order by remark) rn FROM table) t
GROUP BY invoiceno

这称为pivot查询。谷歌“oracle pivot”并试一试,如果您遇到任何问题,请告诉我们problems@CaiusJard这是我一开始的想法,但pivot也不可能。我能想到的最佳解决方案是在一列中用逗号分隔的备注列表,使用ListAggue交叉表查询,使用大小写表达式“pivot也不可能”…你怎么知道?你试了什么?出了什么问题?让我们看看你的尝试。这是一个简单的例子,看起来应该是可能的。那么第四句话会发生什么呢?同意Ted的观点,注释1,2,3不是固定的。有时会出现备注4、备注5等。@TedatORCL.Pro您是否添加了另一列?!这相当简单:高亮显示任意一条最大线,按ctrl-c,按ctrl-v,将数字从3(或任何数字)更改为4,5。。如果你有一千句话,你就有一千句columns@CKAng-为了将来参考,请在您的问题中包括相关细节,如数据的可变性。它可以让人们不再浪费时间去写对你的实际问题不起作用的答案。@CKAng基本数据库理论:“列的数量是固定的,行的数量是可变的”。每次违反此要求时,您都会遇到问题(即,这样做是个坏主意;如果您有陈述要求,请在前端执行,而不是在数据库中)。或者使用没有“列数固定”的db作为内在设计原则