【问题标题】:Oracle - how to select multiple rows as 1 row with columnsOracle - 如何选择多行作为 1 行的列
【发布时间】:2018-09-12 00:11:51
【问题描述】:

我正在使用 Oracle 12c,并且返回的数据包含多行,我想切换到具有描述数据的标题的单行选择语句。 这里的转折点是数据列是一个 CLOB。

这是一个示例(实际上,这将是十几行):

select ID, description, data from dual


|---------------------|------------------|------------------|
|          ID         |     Description  |       Data       |
|---------------------|------------------|------------------|
|          1          |     DescriptionA |      TestA       |
|---------------------|------------------|------------------|
|          2          |     DescriptionB |      TestB       |
|---------------------|------------------|------------------|

我希望它看起来像这样:

|---------------------|------------------|
|   DescriptionA      |    DescriptionB  |
|---------------------|------------------|
|          TestA      |    TestB         |
|---------------------|------------------|

非常感谢任何想法!

谢谢!

【问题讨论】:

标签: sql oracle pivot oracle12c


【解决方案1】:

你可以在什么时候使用大小写

with t(ID, Description,Data) as
    (
      select  1, 'DescriptionA','TestA' from dual
      union all
      select 2, 'DescriptionB','TestB' from dual
    )
    select max( case when Data='TestA' then Data end) as DescriptionA,
    max(case when Data='TestB' then Data end) as DescriptionB from t

DESCRIPTIONA    DESCRIPTIONB
TestA           TestB

【讨论】:

    【解决方案2】:

    这也是一个选项,如果您想要动态值而不是对 ID 列进行硬编码,请使用动态查询。

      SELECT  MAX(DECODE(T.ID, 1, T.TE)) AS DES1,
              MAX(DECODE(T.ID, 2, T.TE)) AS DES2
              FROM (SELECT 1 as id, 'DescriptionA' AS DES, 'TestA' AS TE FROM DUAL
    UNION ALL
      SELECT 2 as id, 'DescriptionB' AS DES, 'TestB' AS TE FROM DUAL)T 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-07
      • 2012-02-13
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      • 2013-10-17
      • 2015-03-03
      • 1970-01-01
      相关资源
      最近更新 更多