从MariaDB服务器上的单个表中将列转换为带条件的行

6pp0gazn  于 2022-11-08  发布在  其他
关注(0)|答案(2)|浏览(104)

我有这样的表:

id_biling  | disc_A  | disc_B | disc_C
    1         100        0        0
    2         200       300      400
    3         500        0       600

我想得到这样结果:

id_biling  | disc |  Desc
    1        100     Disc_A
    2        200     Disc_A 
    2        300     Disc_B
    2        400     Disc_C
    3        500     Disc_A
    3        600     Disc_C
jv2fixgn

jv2fixgn1#

这是一个使用 SQL Server 的解决方案
您可以使用unpivot

select *
from   t
UNPIVOT  
   (disc FOR "DESC" IN   
      (disc_A, disc_B, disc_C)  
)AS unpvt;

| id_biling标识符|圆盘|描述|
| - -|- -|- -|
| 一个|100个|磁盘_A|
| 2个|二百个|磁盘_A|
| 2个|三百个|磁盘_B|
| 2个|四百人|光盘_C|
| 三个|500个|磁盘_A|
| 三个|六百元|光盘_C|
Fiddle

gupuwyp2

gupuwyp22#

MySQL - How to unpivot columns to rows?启发,问题得以解决

(select id_billing, 'DISC_A' DESCR, DISC_A as DISC from tTable where DISC_A > 0 ) 
union all 
(select id_billing, 'DISC_B' DESCR, DISC_B as DISC from tTable where DISC_B > 0 ) 
union all 
(select id_billing, 'DISC_C' DESCR, DISC_C as DISC from tTable where DISC_C > 0 ) 
ORDER BY 1,2;

相关问题