将行转置为单列

Posted

技术标签:

【中文标题】将行转置为单列【英文标题】:Transposing rows to a single column 【发布时间】:2013-12-05 03:07:40 【问题描述】:

我有一个需要在单列中输入值的网格元素

 Key_id  event1    name1  date1   price1   event2   name2  date2   price2 
  234   Marriage   Sasha  09-DEC   4300   Birthday  Kate   10-DEC   3000

我的 SQL 查询输出将返回行中列出的数据

Key_id  event     Name    date     price
 234   Marriage   Sasha  09-DEC    4300
 234   Birthday   Kate   10-DEC    3000

所以我需要根据 key_id 将行列表转置或转换为列。值不是固定的,将根据用户选择的时间段动态变化。

我在这个论坛上也遇到过类似的问题,但我想知道是否可以使用任何 Java API 或 SQL 查询来实现同样的事情。

请告诉我如何实现这一目标..

谢谢

【问题讨论】:

您的实际 RDBMS mysql 或 Oracle 是什么? 根据 id 将行列表转置为单个列 是什么意思。您在所需的输出中显示了 9 列... @peterm 感谢您的回复..我正在使用 Oracle ..问题是我的查询输出数据将被列为具有重复 key_id 的行。我需要一种解决方案,以使所需的输出应根据 key_id 将其分组为单个列.. ...您还没有弄清楚“转换为单列”的含义-您的意思是将各个列(事件、名称等)连接到一个列(注意,我推荐这个,因为你松散了简单的方法来分离信息)。 @ Clockwork-Muse 对不起,如果我的问题不清楚。我需要将我的行转换为以 id 为键的列,以便数据按列增长..希望这可以解决您的问题..谢谢 嗨@jegadees 这个答案对解决您的问题有帮助吗?如果不是,请在您的问题中添加不成功的内容。当答案对您有帮助时,您是否可以通过单击旁边的空心绿色复选标记来接受它? 【参考方案1】:

根据您的问题,我猜您想将水平轴(列)转换为垂直轴。

使用类似的东西:

select t.key_id
,      t.event1 event
,      t.name1  name
,      t.date1  date_event
,      t.price1 price
from   table t
union all
select t.key_id
,      t.event2 event
,      t.name2
,      t.date2
,      t.price2
from   table t

这对您有帮助吗?如果有,请确认。如果没有,请留言。

【讨论】:

以上是关于将行转置为单列的主要内容,如果未能解决你的问题,请参考以下文章

mysql 将行转置为列

SQL 将行转置为列

Tsql 将行转置为列,按列分组

Oracle SQL Developer:如何使用 PIVOT 函数将行转置为列

SQL Server JSON 将行转置为列

SQL将行转置为列(按键变量分组)?