使用 CASE 和 GROUP BY 旋转的动态替代方案
技术问答
283 人阅读
|
0 人回复
|
2023-09-12
|
我有一张看起来像这样的表:
: ]: m5 k( j$ ` r& _# E3 B* v! wid 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
解决方案: |
|
|
|
|
|