2009-06-27 7 views
3

Ich habe eine Tabelle mit Spalten wie:Wie konvertiere ich die Felder in einer Zeile in Spalten?

  Cost  Rate 

      Repair 12 
      Repair 223 
      Wear  1000  
      Wear  666 
      Fuel  500 
      Repair 600 
      Fuel  450 
      Wear  400 

und ich möchte diese Daten als Spalten (Reparatur, Verschleiß, Treibstoff) als:

  Repair Wear Fuel 
      825  2066 950 

Wie könnte ich dies tun, eine MS Access Abfrage?

+0

Entschuldigung, ich habe keine fertige Lösung für Ihre Frage, aber Sie möchten vielleicht nach dem Wort "Transponieren" + der Datenbank suchen, die Sie verwenden. Ich denke, in MSSQL/Oracle kann dies mit PIVOT/UNPIVOT erreicht werden. Willkommen, nette Frage und viel Glück! – merkuro

+0

Inzwischen haben Sie wahrscheinlich herausgefunden, wie es geht. Aktualisieren Sie die Frage einfach mit den richtigen Befehlen oder wählen Sie eine Antwort aus. – dlamblin

Antwort

1

Dies wird die Daten, die Sie brauchen:

select cost, sum(rate) 

from mytable 

group by cost 

und dann können Sie es präsentieren je nachdem, welche Art und Weise Sie mögen.

+0

danke für Ihre Antwort..aber ich möchte die Zeilen (Reparatur, Verschleiß, Kraftstoff) als Spalten –

+1

SQL unterstützt es nicht. (Es gibt keinen Grund, dass es sollte ...) Sie müssen das programmatisch danach machen. –

+0

@gs Sie sind insofern richtig, als dieser Ansatz oft als Versuch gesehen werden kann, etwas zu korrigieren, das in der Modellierungsphase schief gelaufen ist. Trotzdem ist diese Anfrage meiner Meinung nach nicht ungewöhnlich und sollte Teil eines modernen Standards sein. Zum Beispiel brauchen all diese Data-Warehouse-Leute das sehr oft. – merkuro

3

ungetestet aber

SELECT 
(SELECT sum(rate) from mytable where cost = 'Repair') AS Repair , 
(SELECT sum(rate) from mytable where cost = 'Wear') AS Wear, 
(SELECT sum(rate) from mytable wherecost = 'Fuel') AS Fuel 
2

können Sie diese Abfrage verwenden

select 
sum(select rate from yourtable where cost = 'Repair') "Repair", 
sum(select rate from yourtable where cost = 'Wear') "Wear", 
sum(select rate from yourtable where cost = 'Fuel') "Fuel" 
from dual 

wenn Sie Oracle

sonst, wenn eine andere Datenbank-Engine, Ihnen eine schnelle Aussage Recht vor machen dieses

create table dual (x char) 

insert into dual values "x" 
+1

Oder, für viele DBMS, einfach "von Dual" weglassen. –

5

Während es eine traditionelle SQL-Lösung dafür gibt, die ziemlich kludgy ist, hat mich das Lesen von this page auf die Tatsache aufmerksam gemacht, dass MS Access eine TRANSFORM ... PIVOT-Anweisung hat, die Sie wahrscheinlich untersuchen und verwenden sollten, um dies zu tun.

Ich kann nicht sicher sein, aber es sollte wie folgt aussehen:

TRANSFORM Sum([Items].[Rate]) AS SumOfRate 
SELECT [Items].[Costs] 
FROM Items 
GROUP BY [Items].[Costs] 
PIVOT Format([Items].[Costs]); 

Und es kann als die schickere bekommen. Z.B.

PIVOT Format([Items].[month],"mmm") In ("Jan","Feb",...,"Nov","Dec"); 
+1

Wenn Benutzer, die Access verwenden, nur die FRICKING-Benutzeroberfläche verwenden, wissen sie, dass diese Art von Dingen möglich ist. Es gibt einen frigierenden Assistenten, der das für Sie erledigt - er heißt CROSSTAB. –

2

Sie können dies mit einer Kreuztabellenabfrage tun. Im Fenster Zugriffsabfragen befindet sich ein Assistent, der Sie durch die Erstellung eines Assistenten führt. Klicken Sie einfach auf die Schaltfläche Neue Abfrage und wählen Sie den Kreuztabellen-Abfrage-Assistenten.

Verwandte Themen