2017-11-06 5 views
0

ich eine Tabelle in PostgreSQL haben wie unten:Abfrage für Kreuztabellen- Ansicht

-------------------------------------------------------------- 
Item1 | Item2 | Item3 | Item4 |Value1| Value2| Value3| Value4| 
-------------------------------------------------------------- 

möchte ich eine Abfrage, die diese Tabelle wie unten zeigen:

ItemHead| ValueHead 
--------------- 
Item1 | Value1| 
--------------- 
Item2 | Value2| 
---------------- 
Item3 | Value3| 
---------------- 
Item4 | Value4| 
--------------- 

Antwort

2

Verwenden Sie einen einzigenSELECT mit einem LATERAL verbinden zu einem VALUES Ausdruck. Das ist kürzer und schneller als mehrere SELECT Aussagen:

SELECT v.* 
FROM tbl, LATERAL (
    VALUES 
     (item1, value1) 
    , (item2, value2) -- data types must be compatible 
    , (item3, value3) 
    , (item4, value4) 
    ) v ("ItemHead", "ValueHead"); -- your desired column names 

Verwandte:

Hinweis: Sie haben den Tag . Aber die Postgres-Funktion crosstab() von der zusätzlichen tablefunc module wird für Pivotieren verwendet, während diese Aufgabe das Gegenteil ist, manchmal als nicht pendelnde bezeichnet. Verwandte:

+0

wirklich nett, ich habe noch nie eine solche Schreibweise gesehen –

0

Verwenden Sie einfach UNION ALL

SELECT item1, value1 FROM your_tab 
UNION ALL 
SELECT item2, value2 FROM your_tab 
UNION ALL 
SELECT item3, value3 FROM your_tab 
UNION ALL 
SELECT item4, value4 FROM your_tab 
Verwandte Themen