目标1: 您的销售数据存储在“购买”表中。 您的销售人员希望以分段形式查看销售数据,按季度细分。
如果您的购买表没有销售数据,请创建一些。确保数据跨越四个季度。 接下来,编写一个查询来透视数据,如下所示:
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 :(得分: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:
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
。一旦你完成了JOINS,那么你可以用你的聚合函数和CASE表达式替换p.DateOfPurchase
并添加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 |