Задать вопрос
abravitov
@abravitov

SQL — запрос с транспонированием?

Добрый день, подскажите, пожалуйста, какой запрос нужен для следующей задачи:


Есть таблица вида


A x 23 1/1/2011

B x 36 1/1/2011

C x 21 1/1/2011

D x 29 1/1/2011

A x 35 2/1/2011

B x 28 2/1/2011

C x 27 2/1/2011

D x 31 2/1/2011

A y 27 1/1/2011

B y 40 1/1/2011

C y 27 1/1/2011

D y 17 1/1/2011

A y 17 2/1/2011

B y 38 2/1/2011

C y 37 2/1/2011

D y 27 2/1/2011


Нужна таблица вида


A B C D

1/1/2011 50 76 48 46

2/1/2011 52 66 64 58


То есть для данной даты для каждого объекта A,B,C,D берется сумма (x+y). Данные при этом представляются в таблице другой формы.


Спасибо большое!
  • Вопрос задан
  • 7533 просмотра
Подписаться 2 Оценить 2 комментария
Решения вопроса 1
4dmonster
@4dmonster
если я правильно понял задание то так:
TRANSFORM sum([поле_с_цыфрами]) as Сумма
SELECT поле_с_ДАТОЙ,
Group By поле_с_ДАТОЙ
PIVOT поле_с_буквой
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Так как вы работаете с реляционной базой данных, то набор столбцов (a,b,c,d) должен быть определен заранее.

Сходу могу предложить такой способ решения вашей задачи:
SELECT 
  t.date,
  SUM(t.a),
  SUM(t.b) 
FROM
  (
   SELECT `date`, cnt AS a, 0 AS b
   FROM
     `table` 
   WHERE `name` = 'a'    
   UNION
   SELECT `date`, 0 AS a, cnt AS b
   FROM
     `table` 
   WHERE `name` = 'b'
   ) t 
GROUP BY t.date 
        


В принципе для c,d,e и т.д. можно до-генерировать запрос автоматически. Но работать такой запрос будет не очень быстро. Для какой нибудь админки куда заходят раз в день посмотреть отчет — нормально. Для часто посещаемой страницы возможно стоит пересмотреть логику?
Ответ написан
@Silver_Clash
а такой вариант не подойдет?
Ответ написан
Комментировать
AloneCoder
@AloneCoder
[object Object]
Можно использовать GROUP BY по двум колонкам(дате и объекту A,B,C,D)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы