2016-07-15 6 views
1

Kann mir bitte jemand helfen bei der Erstellung der folgenden Pivot-Tabelle in MS-Access.Erstellen von Pivot in MS Access, um Nullwerte für einen Datensatztyp zu vermeiden?

Datentabelle

value | Rank | Type 
    1.5 | 5 | alpha 
    2.4 | 4 | alpha 
    3.6 | 3 | alpha 
    4.63 | 2 | alpha 
    5.36 | 1 | alpha 

Required Pivot ist

Type | 5 | 4 | 3 | 2 | 1 
    alpha|1.5 |2.4 |3.6 |4.63 |5.36 

ich die unter Abfrage

TRANSFORM [Value] 
    SELECT [Type] 
    FROM tbl 
    GROUP BY [Type], [Value] 
    PIVOT [Rank]; 

und bekommen resultset als

Type | 1 | 2 | 3 | 4 | 5 
alpha| | | | |1.5 
alpha| | | |2.4| 
alpha| | |3.6| | 
alpha| |4.63| | | 
alpha|5.36| | | | 
versucht haben,

Könnte mir bitte jemand helfen, diese Abfrage zu aktualisieren, um das gewünschte Ergebnis zu erhalten.

Danke eine Tonne. Honig

Antwort

1

Um alle "alpha" Werte in einer Reihe zu bekommen, müssen Sie Value aus der GROUP BY-Abschnitt entfernen.

Dann brauchen Sie eine Aggregationsfunktion - wenn Sie sicher sind, nur einen Wert pro Rang zu haben, erledigt First() den Job.

Um die 5-4-3-2-1-Reihenfolge zu erhalten, fügen Sie eine ORDER BY-Klausel hinzu.

TRANSFORM First([Value]) 
SELECT [Type] 
FROM tPivot 
GROUP BY [Type] 
ORDER BY [Rank] DESC 
PIVOT [Rank]; 

Edit: es funktioniert für s mehr Type

+-------+-----+-----+-----+------+------+ 
| Type | 5 | 4 | 3 | 2 | 1 | 
+-------+-----+-----+-----+------+------+ 
| alpha | 1,5 | 2,4 | 3,6 |  | 5,36 | 
| beta | 999 |  |  | 4,63 | 66 | 
+-------+-----+-----+-----+------+------+ 
+0

Vielen Dank Andre. :) – honey

+0

Was ist, wenn wir zwei Arten haben. Sagen Sie für 3 Ränge Typ ist Alpha und für 2 Ränge ist Typ Beta. Würde dieselbe Abfrage funktionieren? – honey

+0

Ja, siehe bearbeiten @Honey – Andre

1
CREATE TABLE #A 
    (

value NUMERIC(22,6), Rank INT, Type VARCHAR(10) 
) 
INSERT INTO #A VALUES 
(1.5, 5,'alpha'), 
    (2.4,4,'alpha'), 
    (3.6,3,'alpha'), 
    (4.63,2,'alpha'), 
    (5.36,1,'alpha') 


SELECT [5],[4],[3],[2],[1] 
FROM 
    (select value,RANK,TYPE from #A) AS  SourceTable 
PIVOT 
(
MAX(value) 
FOR RANK IN ([1],[2],[3],[4],[5]) 
) AS PivotTable; 
+1

Syntaxfehler Dies gibt. weil PivotTable mit Transform-Schlüsselwort in MS-Access arbeitet (nach meinem Verständnis). – honey

+0

Dies funktioniert nur in MS SQL – Chanukya