Oracle 11g中的PIVOT列

时间:2014-10-22 21:09:11

标签: sql oracle oracle11g

我正在尝试将行值转换为没有聚合的列。以下是以下示例

SampleID      TRGTNAME         CountValue
S1               K                39.5
S1               L                23.5
S1               M                -1.5
S2               K                 4.5
S2               L                 7.5
S2               M                 8.3

我需要的是一个查询,为每个样本返回一行,如下所示:

SampleID      TRGTCountValueK        TRGTCountValueL    TRGTCountValueM
S1                39.5                  23.5               -1.5
S2                 4.5                   7.5                 8.3

表samp_tst包含列(SampleID,TRGTName,CountValue)

PIVOT操作不需要聚合。非常感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您可以在使用PIVOT时使用MAX,因为您不需要聚合。

PIVOT,就像这样

SELECT * FROM
(SELECT *
FROM MyTable )T
PIVOT
( MAX("CountValue") for "TRGTNAME" in ('K' as TRGTNAMEK, 
                                       'L' TRGTNAMEL,
                                       'M' TRGTNAMEM))pvt

你可以使用基于案例的MAX聚合来实现,这类似于PIVOT

SELECT "SampleID",
       MAX( CASE WHEN "TRGTNAME" = 'K' THEN "CountValue" END) as TRGTCountValueK,
       MAX( CASE WHEN "TRGTNAME" = 'L' THEN "CountValue" END) as TRGTCountValueL,
       MAX( CASE WHEN "TRGTNAME" = 'M' THEN "CountValue" END) as TRGTCountValueM

FROM MyTable
GROUP BY "SampleID"