在SQL查询(oracle)中将行转换为列
我不知道写报告来显示以下结果,请协助。非常感谢 这就是我的DB表的样子 这就是我想在报告中展示的内容在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)
注意:标记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作为内在设计原则