2013-09-18 5 views
0

Цель 1: Данные о продажах хранятся в таблице «Покупки». Ваш торговый персонал хочет видеть данные о продажах в поворотной форме, разбитой на четверть.Объединение таблиц и сводных данных с MySQL

Если в таблице покупок нет данных о продажах, создайте их. Убедитесь, что данные занимают четыре четверти. Далее, написать запрос для поворота данных следующим образом:

Album    Q1 Q2 Q3 Q4 

OK Computer  2 5 3 7 

Sea Change  8 6 2 1 

Не создавать отдельную таблицу или представление. Не меняйте таблицы.

Сохраните запрос как dba1lesson10project1.sql и передайте его в проект.

Это то, что мне нужно сделать. Но таблица, с которой мне нужно работать, выглядит так. И в заявлении указывается, что я не могу его вообще изменить.

CustomerID DateOfPurchase SongID 

1    2007-03-31  3 
3    2007-06-30  4 
4    2007-09-30  4 
5    2007-12-31  5 

Я знаю, что мне нужно объединить три таблицы вместе, чтобы я мог группироваться по названию. Каковы мои таблицы «Песни, альбомы» и «Покупки».

SELECT Albums.Title FROM Albums 
LEFT JOIN Songs 
INNER JOIN Purchases 
ON Songs.SongID = Purchases.SongID 
ON Albums.Title = Purchases.SongID, 
SELECT Title, 
SUM(CASE WHEN QUARTER(DateOfPurchase) = 1 THEN 1 ELSE 0 END) AS 'Q1', 
SUM(CASE WHEN QUARTER(DateOfPurchase) = 2 THEN 1 ELSE 0 END) AS 'Q2', 
SUM(CASE WHEN QUARTER(DateOfPurchase) = 3 THEN 1 ELSE 0 END) AS 'Q3', 
SUM(CASE WHEN QUARTER(DateOfPurchase) = 4 THEN 1 ELSE 0 END) AS 'Q4' 
From Purchases 
GROUP BY Title; 

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

Я пробовал код, указанный выше в нескольких других вариантах, которые не удались меня мимо стол соединяющая часть.

Любая помощь будет высоко оценена.

+0

Просьба показать схемы таблиц и данные образца для всех трех таблиц. – peterm

ответ

1

Мое предложение, прежде чем пытаться выполнить PIVOT, было бы первым, напишите запрос, чтобы вернуть нужные столбцы, это будет связано с объединением ваших таблиц. Вы не указали свои определения таблиц, поэтому я делаю несколько догадок о структуре. Если таблицы структурированы, подобные следующему:

CREATE TABLE Purchases 
    (`CustomerID` int, `DateOfPurchase` datetime, `SongID` int) 
; 

CREATE TABLE Albums 
    (`AlbumId` int, `Title` varchar(11)) 
; 

CREATE TABLE Songs 
    (`SongID` int, `AlbumID` int) 
; 

Затем вы должны выбрать из таблиц с помощью JOIN аналогична этого код:

select a.title, 
    p.DateOfPurchase 
from albums a 
inner join songs s 
    on a.albumid = s.albumId 
inner join purchases p 
    on s.songid = p.songid 

Этого запрос вернет вам альбом Title, а также как DateOfPurchase, который вам нужно для поворота данных. После того, как вы стыки разработаны, то вы можете заменить p.DateOfPurchase с совокупным выражением функции и CASE, и добавить предложения GROUP BY, чтобы получить окончательный результат:

select a.title, 
    SUM(CASE WHEN Quarter(p.DateOfPurchase) = 1 THEN 1 ElSE 0 END) AS Q1, 
    SUM(CASE WHEN Quarter(p.DateOfPurchase) = 2 THEN 1 ELSE 0 END) AS Q2, 
    SUM(CASE WHEN Quarter(p.DateOfPurchase) = 3 THEN 1 ELSE 0 END) AS Q3, 
    SUM(CASE WHEN Quarter(p.DateOfPurchase) = 4 THEN 1 ELSE 0 END) AS Q4 
from albums a 
inner join songs s 
    on a.albumid = s.albumId 
inner join purchases p 
    on s.songid = p.songid 
group by a.title; 

См SQL Fiddle with Demo. Это дает результат:

|  TITLE | Q1 | Q2 | Q3 | Q4 | 
| OK Computer | 1 | 0 | 0 | 0 | 
| Sea Change | 0 | 1 | 1 | 0 | 
+0

Спасибо. Я ценю это, много. –

Смежные вопросы