2016-06-22 2 views
0

J'ai une table que j'ai besoin d'interroger. Cette table contient 4 colonnes, appelons un "Date", un autre "Prix A" puis "Prix B" et "Nom B". Donc ce sont mes en-têtes de colonne, et bien sûr chaque ligne a une date, le prix A et le prix B à cette date, et le nom correspondant de B.Comment puis-je écrire une requête non pivot?

Ce que je veux faire est de faire correspondre chaque ligne à une date - donc la première ligne sera 01/01/2016, par exemple, et aura une colonne séparée pour chaque B. Donc, effectivement, je serai capable de voir, pour n'importe quelle date, les prix correspondants de chaque B. Malheureusement avec mes compétences SQL limitées Je ne sais pas comment commencer avec cette manipulation.

Vous voulez:

   B1  B2  B3  B4  A 
    01/06/2016: 1  5  6  6  3 
    02/06/2016: 1.5 5.2 6.1  6.3 3 

ont:

   Date Name B  Price B Price A 
     1/06/2016 B1   1   3 
     1/06/2016 B2   5   3 
     1/06/2016 B3   6   3 
     1/06/2016 B4   6   3 

Répondre

0

Vous pourriez confondre avec UNPIVOT PIVOT. PIVOT transforme les lignes en colonnes, tandis que UNPIVOT fait le contraire.

Donc, en utilisant un PIVOT alors quelque chose comme cela pourrait fonctionner:

SELECT D, B1, B2, B3, B4, A 
FROM 
(
    SELECT TO_CHAR("Date",'DD/MM/YYYY')||':' as D, 
    "Name B" as Name, 
    "Price A" as A, 
    "Price B" as PriceB 
    FROM WHATIHAVE 
) 
PIVOT (MAX(PriceB) FOR Name IN (B1, B2, B3, B4));