如何转动在MySQL脚本一个单一的表? [重复]

问题描述 投票:0回答:1

这个问题已经在这里有一个答案:

我有SQL表,看起来像这样:

select PARAMNAME, PARAMVALUE, INTERFACEID from RTVS_RESPONSE WHERE INTERFACEID IN ('MPN.INQUIRY.DJA')
PARAMNAME     PARAMVALUE                          INTERFACEID     
billingInfo1  021076427070122                     MPN.INQUIRY.DJA
billingInfo2  411122                              MPN.INQUIRY.DJA
billingInfo3  100                                 MPN.INQUIRY.DJA
billingInfo4  03032014                            MPN.INQUIRY.DJA
billingInfo5  000000000000000                     MPN.INQUIRY.DJA
billingInfo6  JL.MESJID IV NO.19,JAKARTA UTARA    MPN.INQUIRY.DJA
billingInfo7  900019191818181778                  MPN.INQUIRY.DJA
amount            89002                           MPN.INQUIRY.DJA
customerName  NPWP DUMMY DJA                      MPN.INQUIRY.DJA
responseCode  00                                  MPN.INQUIRY.DJA

和这个 :

select PARAMNAME, PARAMVALUE, INTERFACEID from RTVS_RESPONSE WHERE INTERFACEID IN ('MPN.INQUIRY.DJBC')
PARAMNAME     PARAMVALUE                          INTERFACEID     
billingInfo1  021076427070122                     MPN.INQUIRY.DJBC
billingInfo2  411122                              MPN.INQUIRY.DJBC
billingInfo3  100                                 MPN.INQUIRY.DJBC
billingInfo4  03032014                            MPN.INQUIRY.DJBC
billingInfo5  000000000000000                     MPN.INQUIRY.DJBC
billingInfo6  JL.MESJID IV NO.19,JAKARTA UTARA    MPN.INQUIRY.DJBC
billingInfo7  900019191818181778                  MPN.INQUIRY.DJBC
amount            89001                           MPN.INQUIRY.DJBC
customerName  NPWP DUMMY DJBC                     MPN.INQUIRY.DJBC
responseCode  00                                  MPN.INQUIRY.DJBC

我想创建一个数据透视表,以便PARAMVALUE成为column name VALUE

像这样 :

INTERFACEID | billingInfo1 | billingInfo2 | billingInfo3 | billingInfo4 | billingInfo5 | billingInfo6 | billingInfo7 | amount | customerName | responseCode

据透露,这是一个单一的表。和其他许多问题被要求参加2个不同的表。我不认为它复制到任何其他人。

mysql syntax
1个回答
0
投票

嗨,我认为你可以使用除外结果:

create temporary table tempTable
(
PARAMNAME varchar(40) not null,    PARAMVALUE  varchar(40) not null,                        INTERFACEID varchar(40) not null 
);


INSERT INTO TEMPTABLE ()
SELECT 'billingInfo1',  '021076427070122', 'MPN.INQUIRY.DJA'
UNION
SELECT 'billingInfo2', '411122','MPN.INQUIRY.DJA'
UNION
SELECT 'billingInfo3','100','MPN.INQUIRY.DJA'
UNION
SELECT 'billingInfo4','03032014','MPN.INQUIRY.DJA'
UNION
SELECT 'billingInfo5','000000000000000','MPN.INQUIRY.DJA'
UNION
SELECT 'billingInfo6','JL.MESJID IV NO.19,JAKARTA UTARA','MPN.INQUIRY.DJA'
UNION
SELECT 'billingInfo7','900019191818181778','MPN.INQUIRY.DJA'
UNION
SELECT 'amount','89002','MPN.INQUIRY.DJA'
UNION
SELECT 'customerName','NPWP DUMMY DJA','MPN.INQUIRY.DJA'
UNION
SELECT 'responseCode','00','MPN.INQUIRY.DJA';

-- SELECT * FROM TEMPTABLE;


SELECT INTERFACEID,
    MAX(CASE WHEN PARAMNAME = 'billingInfo1' THEN PARAMVALUE ELSE NULL END) AS 'billingInfo1',
    MAX(CASE WHEN PARAMNAME = 'billingInfo2' THEN PARAMVALUE ELSE NULL END) AS 'billingInfo2',
    MAX(CASE WHEN PARAMNAME = 'billingInfo3' THEN PARAMVALUE ELSE NULL END) AS 'billingInfo3',
    MAX(CASE WHEN PARAMNAME = 'billingInfo4' THEN PARAMVALUE ELSE NULL END) AS 'billingInfo4',
    MAX(CASE WHEN PARAMNAME = 'billingInfo5' THEN PARAMVALUE ELSE NULL END) AS 'billingInfo5',
    MAX(CASE WHEN PARAMNAME = 'billingInfo6' THEN PARAMVALUE ELSE NULL END) AS 'billingInfo6',
    MAX(CASE WHEN PARAMNAME = 'billingInfo7' THEN PARAMVALUE ELSE NULL END) AS 'billingInfo7',
    MAX(CASE WHEN PARAMNAME = 'amount' THEN PARAMVALUE ELSE NULL END) AS 'amount',
    MAX(CASE WHEN PARAMNAME = 'customerName' THEN PARAMVALUE ELSE NULL END) AS 'customerName',
    MAX(CASE WHEN PARAMNAME = 'responseCode' THEN PARAMVALUE ELSE NULL END) AS 'responseCode'

FROM TEMPTABLE
GROUP BY INTERFACEID;

drop temporary table temptable;

但是,如果你有其他的列动态您在使用EXECUTE例如使用动态SQL查询被发现这里:qazxsw POI

© www.soinside.com 2019 - 2024. All rights reserved.