回答

收藏

使用 CASE 和 GROUP BY 旋转的动态替代方案

技术问答 技术问答 283 人阅读 | 0 人回复 | 2023-09-12

我有一张看起来像这样的表:
: ]: m5 k( j$ `  r& _# E3 B* v! w
    id    feh    bar1  10  10        A2  20    20          A3 3  3  3     3                3               3                 B4 4  4  4   4                           4                      B5 5  5 5  5          5                5            5                                                    5         5                                                 5       5  5  5  5  5 5  5 5  5 5 5 5 5  5              5                               5  5 5 5 5    5 5  5 5 5 5 5      5                                         5                                             5                                5         5                                5                      5                      5                                   5                                                                   C6 6  6   6           D7       7       D8 8   8   8                   8       8         8              D
    * Q* }+ X$ M* y5 x' _% X. L5 o* `
希望它看起来像这样:
) s, g! C. z( T! W* A) s0 q, e

    * h$ N6 ]/ F7 D) M* D
  • bar  val1   val2   val3A     10    20 B       3     4  4                                           4 C    5 5                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 D      6              8[//8[//8[         code]我有这样的查询:[code]SELECT bar,   MAX(CASE WHEN abc."row" = 1 THEN feh ELSE NULL END) AS "val1",  MAX(CASE WHEN abc."row" = 2 THEN feh ELSE NULL END) AS "val2",  MAX(CASE WHEN abc."row" = 3 THEN feh ELSE NULL END) AS "val3"FROM(  SELECT bar,feh,row_number() OVER (partition by bar) as row  FROM "Foo" ) abcGROUP BY bar
    $ d: Q, P4 o) ^" Y4 K8 h
这是一种非常灵活的方法,如果你想创建大量的新列,它会变得笨拙。我想知道我是否想知道CASE它能更好地使查询更具动态性吗?另外,我想看到其他方法来做到这一点。
% }0 ~; ]% o9 ]" c2 T                                                                5 n' E; y9 C4 g* u0 e
    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则