【问题标题】:PIVOT columns in Oracle 11gOracle 11g 中的 PIVOT 列
【发布时间】:2014-10-22 21:09:10
【问题描述】:

我正在尝试将行值作为没有聚合的列。这是下面的例子

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 操作不需要聚合。非常感谢您的帮助

【问题讨论】:

    标签: sql oracle oracle11g


    【解决方案1】:

    您可以在使用 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"
    

    【讨论】:

    • 感谢您的回答。感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多