2009-06-27 13 views
3

J'ai une table avec des colonnes telles que:Comment convertir les champs d'une ligne en colonnes?

  Cost  Rate 

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

et je veux ces données sous forme de colonnes (Réparation, Porter, carburant):

  Repair Wear Fuel 
      825  2066 950 

Comment pourrais-je faire cela en utilisant un MS Access Question?

+0

Désolé, je n'ai pas de solution prête à l'emploi pour votre question, mais vous voudrez peut-être rechercher le mot "transposer" + la base de données que vous utilisez. Je pense que dans MSSQL/Oracle cela peut être réalisé avec PIVOT/UNPIVOT. Bienvenue, bonne question et bonne chance! – merkuro

+0

Maintenant, vous avez probablement compris comment le faire. Il suffit donc de mettre à jour la question avec les commandes correctes, ou sélectionnez une réponse. – dlamblin

Répondre

1

Cela obtenir les données dont vous avez besoin:

select cost, sum(rate) 

from mytable 

group by cost 

et vous pouvez le présenter comme vous voulez.

+0

merci pour votre réponse..mais je veux les lignes (réparation, usure, carburant) en tant que colonnes –

+1

SQL ne le supporte pas. (Il n'y a pas de raison que ça devrait ...) Vous devez le faire par programme après. –

+0

@gs vous avez raison dans la mesure où cette approche peut souvent être considérée comme une tentative de réparer quelque chose qui a mal tourné dans la phase de modélisation. Néanmoins, à mon avis, cette demande n'est pas si rare et devrait faire partie d'une norme moderne. Par exemple, tous ces types d'entrepôt de données en ont besoin très souvent. – merkuro

3

non testé, mais

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

vous pouvez utiliser cette requête

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 

si vous utilisez Oracle

autrement, si tout autre moteur de base de données, vous pouvez faire une déclaration rapide juste avant celui-ci

create table dual (x char) 

insert into dual values "x" 
+1

Ou, pour de nombreux SGBD, omettez simplement "du dual". –

5

Bien qu'il existe une solution SQL traditionnelle pour ce qui est assez kludgy, la lecture this page m'a alerté sur le fait que MS Access a une déclaration TRANSFORM ... PIVOT que vous devriez probablement examiner et utiliser pour le faire.

Je ne peux pas être certain, mais il devrait ressembler à:

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

Et il peut faire colombophile que cela. PAR EXEMPLE.

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

Si les utilisateurs d'Access n'utilisaient que l'interface utilisateur de FRICKING, ils sauraient que ce genre de choses est possible. Il y a un assistant de frigging pour faire ça pour vous - ça s'appelle un CROSSTAB. –

2

Vous pouvez le faire avec une requête Analyse croisée. Il y a un assistant dans la fenêtre Requêtes d'accès qui vous guidera à travers la création d'un. Cliquez simplement sur le bouton Nouvelle requête et sélectionnez l'Assistant Requête croisée.