2016-06-29 5 views
0

Ich habe Tabellenzeilen, die ich auf Spalten transponiert habe, aber wenn die Werte generiert werden, werden sie diagonal angezeigt und ich bin mir nicht sicher warum.SQL transponierte Werte diagonal angezeigt

Original-Tabelle

SELECT * FROM TABLE1; 

enter image description here

Dies ist die SQL-Anweisung i die Spalten transponieren verwendet: WNS, TNS und NVP

CREATE TABLE FMTABLE AS 
SELECT EXPERIMENT, STAGE, INTSTAGE, SCENARIO, 
CASE WHEN TPG LIKE '%ASPN%' THEN WNS END AS ASPN_WNS, 
CASE WHEN TPG LIKE '%ASPD%' THEN WNS END AS ASPD_WNS, 
CASE WHEN TPG LIKE '%ASDD%' THEN WNS END AS ASDD_WNS, 
CASE WHEN TPG LIKE '%SSSS%' THEN WNS END AS SSSS_WNS, 
CASE WHEN TPG LIKE '%DDDD%' THEN WNS END AS DDDD_WNS, 
CASE WHEN TPG LIKE '%FFFF%' THEN WNS END AS FFFF_WNS, 
CASE WHEN TPG LIKE '%GGGG%' THEN WNS END AS GGGG_WNS, 
CASE WHEN TPG LIKE '%HHHH%' THEN WNS END AS HHHH_WNS, 
CASE WHEN TPG LIKE '%JJJJ%' THEN WNS END AS JJJJ_WNS, 
CASE WHEN TPG LIKE '%KKKK%' THEN WNS END AS KKKK_WNS, 
CASE WHEN TPG LIKE '%LLLL%' THEN WNS END AS LLLL_WNS, 
CASE WHEN TPG LIKE '%EEEE%' THEN WNS END AS EEEE_WNS 
FROM TABLE1; 

FMTABLE

enter image description here Die Spalten sind korrekt, aber die Werte zeigen sich auf seltsame Weise. Ich versuche nur 2 Datenzeilen zu erhalten (SCENE01 und SCENE02)

Wie gehe ich vor, die Tabelle richtig zu transponieren?

Tabellengenerierung Code

CREATE TABLE TABLE1 (
    EXPERIMENT NVARCHAR(55), 
    STAGE NVARCHAR(55), 
    INTSTAGE NVARCHAR(55), 
    SCENARIO NVARCHAR(55), 
    TPG NVARCHAR(55), 
    WNS DOUBLE, 
    TNS DOUBLE, 
    NVP DOUBLE 
); 
INSERT INTO TABLE1 VALUES ('EXP1', 'STAGE1', 'INTSTAGE1', 'SCENE01', 'ASPN', 0.5, 0.6, 0.8); 
INSERT INTO TABLE1 VALUES ('EXP1', 'STAGE1', 'INTSTAGE1', 'SCENE01', 'ASPD', 0.5, 0.5, 0.8); 
INSERT INTO TABLE1 VALUES ('EXP1', 'STAGE1', 'INTSTAGE1', 'SCENE01', 'ASDD', 0.5, 0.8, 0.8); 
INSERT INTO TABLE1 VALUES ('EXP1', 'STAGE1', 'INTSTAGE1', 'SCENE01', 'SSSS', 0.5, 0.6, 0.8); 
INSERT INTO TABLE1 VALUES ('EXP1', 'STAGE1', 'INTSTAGE1', 'SCENE01', 'DDDD', 0.5, 0.1, 0.8); 
INSERT INTO TABLE1 VALUES ('EXP1', 'STAGE1', 'INTSTAGE1', 'SCENE01', 'FFFF', 0.5, 0.2, 0.8); 
INSERT INTO TABLE1 VALUES ('EXP1', 'STAGE1', 'INTSTAGE1', 'SCENE01', 'GGGG', 0.5, 0.63, 0.8); 
INSERT INTO TABLE1 VALUES ('EXP1', 'STAGE1', 'INTSTAGE1', 'SCENE01', 'HHHH', '', '', ''); 
INSERT INTO TABLE1 VALUES ('EXP1', 'STAGE1', 'INTSTAGE1', 'SCENE01', 'JJJJ', '', '', ''); 
INSERT INTO TABLE1 VALUES ('EXP1', 'STAGE1', 'INTSTAGE1', 'SCENE01', 'KKKK', '', '', ''); 
INSERT INTO TABLE1 VALUES ('EXP1', 'STAGE1', 'INTSTAGE1', 'SCENE01', 'LLLL', 0.5, 0.8, 0.8); 
INSERT INTO TABLE1 VALUES ('EXP1', 'STAGE1', 'INTSTAGE1', 'SCENE01', 'EEEE', 0.5, 0.98, 0.8); 

INSERT INTO TABLE1 VALUES ('EXP1', 'STAGE1', 'INTSTAGE1', 'SCENE02', 'ASPN', 0.5, 0.6, 0.8); 
INSERT INTO TABLE1 VALUES ('EXP1', 'STAGE1', 'INTSTAGE1', 'SCENE02', 'ASPD', 0.5, 0.5, 0.8); 
INSERT INTO TABLE1 VALUES ('EXP1', 'STAGE1', 'INTSTAGE1', 'SCENE02', 'ASDD', 0.5, 0.8, 0.8); 
INSERT INTO TABLE1 VALUES ('EXP1', 'STAGE1', 'INTSTAGE1', 'SCENE02', 'SSSS', 0.5, 0.6, 0.8); 
INSERT INTO TABLE1 VALUES ('EXP1', 'STAGE1', 'INTSTAGE1', 'SCENE02', 'DDDD', 0.5, 0.1, 0.8); 
INSERT INTO TABLE1 VALUES ('EXP1', 'STAGE1', 'INTSTAGE1', 'SCENE02', 'FFFF', 0.5, 0.2, 0.8); 
INSERT INTO TABLE1 VALUES ('EXP1', 'STAGE1', 'INTSTAGE1', 'SCENE02', 'GGGG', 0.5, 0.63, 0.8); 
INSERT INTO TABLE1 VALUES ('EXP1', 'STAGE1', 'INTSTAGE1', 'SCENE02', 'HHHH', '', '', ''); 
INSERT INTO TABLE1 VALUES ('EXP1', 'STAGE1', 'INTSTAGE1', 'SCENE02', 'JJJJ', '', '', ''); 
INSERT INTO TABLE1 VALUES ('EXP1', 'STAGE1', 'INTSTAGE1', 'SCENE02', 'KKKK', '', '', ''); 
INSERT INTO TABLE1 VALUES ('EXP1', 'STAGE1', 'INTSTAGE1', 'SCENE02', 'LLLL', 0.5, 0.8, 0.8); 
INSERT INTO TABLE1 VALUES ('EXP1', 'STAGE1', 'INTSTAGE1', 'SCENE02', 'EEEE', 0.5, 0.98, 0.8); 
+1

Mysql und sqlite sind 2 verschiedene Produkte. Bitte entfernen Sie das irrelevante Tag. – Shadow

Antwort

1

Wenn Sie nur zwei Zeilen in der Ausgabe sehen, dann wollen Sie wahrscheinlich Ihre Daten durch Szenario Spalte aggregieren. Verwenden Sie Ihre bedingten Anweisungen innerhalb einer Aggregatfunktion. In meinem Beispiel verwende ich sum(), aber ich kann es mit dem ersetzen, das du wirklich brauchst:

select 
    scenario, 
    sum(CASE WHEN TPG LIKE '%ASPN%' THEN WNS ELSE 0 END) AS ASPN_WNS 
    ... 
    from table1 
    group by scenario