2011-04-29 47 views
0

我有我們的表中的一個小樣本:SQL爲多行到一行與類別和日期分組不同的列數

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我得到一個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 
+1

對於什麼數據庫? – 2011-04-29 01:59:33

+1

您正在使用哪個「SQL」數據庫... MySQL,SQL-Server等... – DRapp 2011-04-29 02:03:55

回答

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 
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; 

由於三個條目中的兩個都是零,這是否給你想要的?