Oracle-如何将多行选择为带有列的1行

时间:2018-09-11 01:16:22

标签: sql oracle pivot oracle12c

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

这里是一个示例(实际上,这将是一排):

select ID, description, data from dual


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

我希望它看起来像这样:

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

任何想法都将不胜感激!

谢谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

这里也是一个选项,如果您想使用动态值而不是对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