mysql - подзапросы

0

У меня есть эта таблица

Изображение 174551

И я хочу и могу заставить его выглядеть так

Изображение 174551

я использовал этот запрос {

SELECT  Cat,Reg,Branch, Mnth, Qty
FROM
(
  SELECT Cat,Reg,Branch, 'Jan' Mnth, Jan Qty
  FROM BQV
  WHERE Jan > 0
  UNION ALL
  SELECT Cat,Reg,Branch, 'Feb', Feb
  FROM BQV

  UNION ALL
  SELECT Cat,Reg,Branch, 'Mar', Mar
  FROM BQV

UNION ALL
  SELECT Cat,Reg,Branch, 'Apr', Apr
  FROM BQV

UNION ALL
  SELECT Cat,Reg,Branch, 'May', May
  FROM BQV

UNION ALL
  SELECT Cat,Reg,Branch, 'Jun', Jun
  FROM BQV

UNION ALL
  SELECT Cat,Reg,Branch, 'Jul', Jul
  FROM BQV
  WHERE Feb > 0

  UNION ALL
  SELECT Cat,Reg,Branch, 'Aug', Aug
  FROM BQV

UNION ALL
  SELECT Cat,Reg,Branch, 'Sept', Sep
  FROM BQV

UNION ALL
  SELECT Cat,Reg,Branch, 'Oct', Octo
  FROM BQV

UNION ALL
  SELECT Cat,Reg,Branch, 'Nov', Nov
  FROM BQV

UNION ALL
  SELECT Cat,Reg,Branch, 'Dec', Dece
  FROM BQV

) QV

}

Могу ли я достичь этого с помощью видов или хранимой процедуры или чего-нибудь еще? мой MySQL ver 5.5, и он не может иметь подзапросы в представлении, и я не могу обновить свою БД, поскольку я не могу позволить ЛЮБЫЕ потери или ошибки вообще.

  • 0
    Вместо того, чтобы снижать репутацию, пожалуйста, говорите, потому что просто снижение репутации не поможет. По крайней мере, комментарий, если вы можете помочь в любом случае.
  • 0
    Большинство людей здесь хотят форматированный текст, а не изображения (или ссылки на изображения).
Показать ещё 6 комментариев
Теги:
unpivot

2 ответа

0
Лучший ответ

Следующий VIEW делает то, что мне нужно.

CREATE VIEW scheme-test. trybqv1 AS

SELECT Cat, Reg, Branch, 'Jan' Mnth, Jan Qty FROM BQV UNION ALL SELECT Cat, Reg, Branch, 'Feb', Feb FROM BQV

UNION ALL SELECT Cat, Reg, Branch, 'Mar', Mar FROM BQV

UNION ALL SELECT Cat, Reg, Branch, 'Apr', Apr FROM BQV

UNION ALL SELECT Cat, Reg, Branch, 'May', May FROM BQV

UNION ALL SELECT Cat, Reg, Branch, 'Jun', Jun FROM BQV

UNION ALL SELECT Cat, Reg, Branch, 'Jul', Jul FROM BQV

UNION ALL SELECT Cat, Reg, Branch, 'Aug', Aug FROM BQV

UNION ALL SELECT Cat, Reg, Branch, 'Sept', Sep FROM BQV

UNION ALL SELECT Cat, Reg, Branch, 'Oct', Octo FROM BQV

UNION ALL SELECT Cat, Reg, Branch, 'Nov', Nov FROM BQV

UNION ALL SELECT Cat, Reg, Branch, 'Dec', Dece FROM BQV

0

Вам не нужна производная таблица (которая называется Wondlgy подзапросом MySQL), просто удалите ее:

CREATE VIEW foo AS
SELECT Cat,Reg,Branch, 'Jan' AS Mnth, Jan AS Qty
FROM BQV
WHERE Jan > 0

UNION ALL
SELECT Cat,Reg,Branch, 'Feb', Feb
FROM BQV

UNION ALL
SELECT Cat,Reg,Branch, 'Mar', Mar
FROM BQV

UNION ALL
SELECT Cat,Reg,Branch, 'Apr', Apr
FROM BQV

UNION ALL
SELECT Cat,Reg,Branch, 'May', May
FROM BQV

UNION ALL
SELECT Cat,Reg,Branch, 'Jun', Jun
FROM BQV

UNION ALL
SELECT Cat,Reg,Branch, 'Jul', Jul
FROM BQV
WHERE Feb > 0

UNION ALL
SELECT Cat,Reg,Branch, 'Aug', Aug
FROM BQV

UNION ALL
SELECT Cat,Reg,Branch, 'Sept', Sep
FROM BQV

UNION ALL
SELECT Cat,Reg,Branch, 'Oct', Octo
FROM BQV

UNION ALL
SELECT Cat,Reg,Branch, 'Nov', Nov
FROM BQV

UNION ALL
SELECT Cat,Reg,Branch, 'Dec', Dece
FROM BQV

Другое решение основано на CROSS JOIN на 2-й таблице, где хранятся имена месяцев от "Jan" до "Dec":

create table months ( mnth char(3));
insert into months values ('Jan'),('Feb'),...

select Cat,Reg,Branch, months.mnth, 
   case mnth 
     when 'Jan' then Jan
     when 'Feb' then Feb
     ...
     when 'Dec' then Dece
   end
from BQV CROSS JOIN months

Ещё вопросы

Сообщество Overcoder
Наверх
Меню