我有一张桌子的小样本:
User Category InitialDate LastRequestDate LastUpdate
1 1907 1/1/2010 2/1/2011 1/15/2011
2 6509 6/10/2010 4/1/2011 3/15/2011
3 3102 3/1/2010 3/15/2011 2/17/2011
4 3102 3/1/2010 2/15/2011 3/17/2011
5 6509 5/10/2010 2/1/2011 1/25/2011
6 1907 1/1/2010 3/1/2011 4/15/2011
每个用户在表格中都有一行,并且不断添加用户 目前大约有30个类别,但总是会添加新的类别。
我需要为每个类别的每一天做一个汇总表,计算什么......
除了做临时表,游标等之外,你有没有建议处理这个问题的最佳方法......?我正在考虑使用row_number分区或/和cte ...但不知道如何做到这一点...由于日期在同一行上,Group By将无法工作...当我使用Group by 3时具有重复计数的每个SKU的行......
Date Catalog InitialCount LastRequestCount LastUpdateCount
1/1/2010 1907 2 0 0
3/1/2010 3102 2 0 0
5/10/2010 6509 1 0 0
6/10/2010 6509 1 0 0
1/15/2011 1907 0 0 2
1/25/2011 6509 0 0 1
2/1/2011 1907 0 1 0
2/1/2011 6509 0 1 0
2/15/201 3102 0 1 0
2/17/2011 3102 0 0 1
3/1/2011 1907 0 1 0
3/15/2011 3102 0 1 0
3/17/2011 3102 0 0 1
4/1/2011 6509 0 1 0
4/15/2011 1907 0 0 1
答案 0 :(得分:0)
运行每个类别和相应日期的不同实例的预查询...然后,使用它作为基础来获得下一个级别......
select
PreQuery.UniqDate,
PreQuery.Category,
sum( case when PreQuery.UniqDate = YT.InitialDate then 1 else 0 end ) InitialCount,
sum( case when PreQuery.UniqDate = YT.LastRequestDate then 1 else 0 end ) LastRequestCount,
sum( case when PreQuery.UniqDate = YT.LastUpdate then 1 else 0 end ) LastUpdateCount
from
( select distinct
Category,
InitialDate UniqDate
from
YourTable
union
select
Category,
LastRequestDate UniqDate
from
YourTable
union
select
Category,
LastUpdate UniqDate ) PreQuery
join YourTable YT
on PreQuery.Category = YT.Category
AND ( PreQuery.UniqDate = YT.InitialDate
OR PreQuery.UniqDate = YT.LastRequestDate
OR PreQuery.UniqDate = YT.LastUpdate )
group by
PreQuery.UniqDate,
PreQuery.Category
答案 1 :(得分:0)
您是否可以将您显示结果的查询,称之为T,然后执行
SELECT Date, Catalog, SUM(InitialCount) AS InitialCount,
SUM(LastRequestCount) AS LastRequestCount,
SUM(LastUpdateCount) AS LastUpdateCount
FROM ( /* your existing query goes here */ ) AS T GROUP BY Date, Catalog;
由于三个条目中的两个是零,这是否能满足您的需求?