Как преобразовать поля в одной строке в столбцы? - PullRequest
3 голосов
/ 27 июня 2009

У меня есть таблица с такими столбцами, как:

          Cost     Rate

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

и я хочу эти данные в виде столбцов (Ремонт, Износ, Топливо) как:

         Repair    Wear   Fuel
           825     2066    950

Как я могу сделать это с помощью MS Access Query?

Ответы [ 5 ]

5 голосов
/ 27 июня 2009

Хотя существует традиционное решение SQL для этого, которое довольно глупо, чтение этой страницы предупредило меня о том, что в MS Access есть оператор TRANSFORM ... PIVOT , который вам, вероятно, следует посмотрите и используйте для этого.

Я не уверен, но это должно выглядеть так:

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

И это может стать более причудливым, чем это. Е.Г.

PIVOT Format([Items].[month],"mmm") In ("Jan","Feb",...,"Nov","Dec");
3 голосов
/ 27 июня 2009

не проверено, но

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 голосов
/ 13 июля 2009

Вы можете сделать это с помощью запроса кросс-таблицы. В окне Access Queries есть мастер, который поможет вам в его создании. Просто нажмите кнопку «Новый запрос» и выберите мастер перекрестных запросов.

2 голосов
/ 27 июня 2009

Вы можете использовать этот запрос

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

если вы используете Oracle

в противном случае, если какой-либо другой механизм базы данных, вы можете сделать быстрое заявление прямо перед этим

create table dual (x char)

insert into dual values "x"
1 голос
/ 27 июня 2009

Это даст вам необходимые данные:

select cost, sum(rate)

from mytable

group by cost

и затем вы можете представить его по своему усмотрению.

...