2015-05-14 98 views
0

我有兩個字段如下表如下所示表查詢:透視使用SQL Server 2008 R2

我想說明以下數據透視表到verticle形式。

test_10

create table test_10 
(
    col1 varchar(10), 
    col2 varchar(10) 
); 

插入記錄

insert into test_10 values('A','2015-01-01'),('A','2015-01-05'),('A','2015-01-10'),('A','2015-02-15'), 
          ('B','2015-01-01'),('B','2015-01-05'),('B','2015-01-10'),('B','2015-02-15'), 
          ('C','2015-02-02'),('C','2015-02-05'),('C','2015-02-08'),('C','2015-02-16'); 

預期結果

ColX Jan Feb 
-------------------      
A  3  1 
B  3  1 
C  0  4 

我嘗試

SELECT ColX,SUM(Jan) as Jan,SUM(Feb) as after 
from 
    ( 
     SELECT col1 as ColX,col1, 
     (CASE WHEN col2 BETWEEN convert(date,'01-01-2015',105) AND convert(date,'31-01-2015',105) THEN count(col1) ELSE 0 END) as Jan, 
     (CASE WHEN col2 BETWEEN convert(date,'01-02-2015',105) AND convert(date,'28-02-2015',105) THEN count(col1) ELSE 0 end) as Feb 
     from test_10 
     Group By col1,col2 
    ) a 
Pivot 
(
    COUNT(col1) 
    FOR col1 in([A],[B],[C]) 
)as pvt 
GROUP BY ColX; 

,但得到的結果

ColX Jan Feb 
------------------- 
A  1  1 
B  1  1 
C  0  1 

回答

2

無需支點,試圖有條件聚集:

SELECT col1, 
     SUM(CASE 
      WHEN col2 BETWEEN CONVERT(DATE, '01-01-2015', 105) AND CONVERT(DATE, '31-01-2015', 105) THEN 1 
      ELSE 0 
      END) AS Jan, 
     SUM(CASE 
      WHEN col2 BETWEEN CONVERT(DATE, '01-02-2015', 105) AND CONVERT(DATE, '28-02-2015', 105) THEN 1 
      ELSE 0 
      END) AS Feb 
FROM test_10 
GROUP BY col1 
+0

太謝謝你了。 – MAK

1

這裏烏爾答樞軸:

SELECT ColX,SUM(Jan) as Jan,SUM(Feb) as Feb 
from 
    ( 
     SELECT col1 as ColX,col1, 
     sum(CASE WHEN col2 BETWEEN convert(date,'01-01-2015',105) AND convert(date,'31-01-2015',105) THEN 1 ELSE 0 END) as Jan, 
     sum(CASE WHEN col2 BETWEEN convert(date,'01-02-2015',105) AND convert(date,'28-02-2015',105) THEN 1 ELSE 0 end) as Feb 
     from test_10 
     Group By col1 
    ) a 
Pivot 
(
    COUNT(col1) 
    FOR col1 in([A],[B],[C]) 
)as pvt 
GROUP BY ColX; 

輸出:

ColX Jan Feb 
A  3 1 
B  3 1 
C  0 4