表sale结构如下:
ID int ,productName varchar(10),Category int ,sale money,date datetime
其中ID自增,为主键
=======================================================
表Category 结构如下:
ID int ,CategoryName varchar(20)
其中ID自增,为主键
要求一条SQL语句查询如下格式的数据。
产品 | 类别 | 年 | 季度 | 本季销量 | 截止本季度销量 |
牛奶 | 奶制品 | 2009 | 1 | 200 | 200 |
牛奶 | 奶制品 | 2009 | 2 | 225 | 425 |
牛奶 | 奶制品 | 2009 | 3 | 189 | 614 |
牛奶 | 奶制品 | 2009 | 4 | 212 | 826 |
矿泉水 | 饮料 | 2009 | 1 | 300 | 300 |
没有建表,就这么写的。意思差不多,其实就是一个自关联的子查询。 不过数据量大的话,效率可能有点问题哦。 WITH SaleData AS ( SELECT a.productName AS 产品, b.CategoryName AS 分类, YEAR(a.Date) AS 年, DATEPART (Q, a.Date) AS 季度, SUM(SaleMoney) 销量 FROM SALE a JOIN Category b WHERE a.Category = b.ID GROUP BY b.CategoryName, a.productName, YEAR(a.Date), DATEPART (Q, a.Date) ) SELECT a.*, (SELECT SUM(销量)FROM SaleData b WHERE b.分类 = a.分类 AND b.年 = a.年 AND b.季度 <= a.季度 ) FROM SaleData a;
SELECT productName,(SELECT CategoryName FROM [Category] WHERE ID=)Category,....
select a.*,(select sum(sale) from sale where productName=a.产品 and
year(date)=a.年 and datepart(quarter,date)<=a.季度)as 截止本季度销量
from
(select sale.productName as 产品 ,Category.CategoryName as 类别,
year(sale.date) as 年,datepart(quarter,sale.date) as 季度,
sum(sale.sale) as 本季度销量
from
sale join Category on sale.Category=Category.id
group by sale.productName,Category.CategoryName,
year(sale.date),datepart(quarter,sale.date)
) a