[英]SQL for Multiple rows into one row with different column counts grouped by Category and date
我有一张我们的桌子的小样本:
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
运行每个类别和相应日期的不同实例的预查询...然后,以此为基础获得下一个级别...
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
你能不能把你已经显示结果的查询,称之为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;
由于三个条目中的两个为零,这是否给出了您想要的?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.