2016-04-15 21 views
1

這裏是我們正在使用的源表:組合兩個行值,並轉動行值到列標題

+-----------+-----------+------+----------+----------+ 
| startdate | enddate | Type | Planet | Rotation | 
+-----------+-----------+------+----------+----------+ 
| 4/4/2016 | 4/10/2016 | A1 | Netptune | P1  | 
| 4/4/2016 | 4/10/2016 | A2 | Netptune | P2  | 
| 4/4/2016 | 4/10/2016 | A3 | Netptune | P3  | 
| 4/4/2016 | 4/10/2016 | A4 | Netptune | P4  | 
| 4/4/2016 | 4/10/2016 | B1 | Saturn | P1  | 
| 4/4/2016 | 4/10/2016 | B2 | Saturn | P2  | 
| 4/4/2016 | 4/10/2016 | B3 | Saturn | P3  | 
| 4/4/2016 | 4/10/2016 | B4 | Saturn | P4  | 
| 4/4/2016 | 4/10/2016 | B5 | Saturn | P5  | 
| 4/4/2016 | 4/10/2016 | C1 | Pluto | P1  | 
| 4/4/2016 | 4/10/2016 | C2 | Pluto | P2  | 
| 4/4/2016 | 4/10/2016 | C3 | Pluto | P3  | 
| 4/4/2016 | 4/10/2016 | C4 | Pluto | P4  | 
| 4/11/2016 | 4/17/2016 | D1 | Netptune | P1  | 
| 4/11/2016 | 4/17/2016 | D2 | Netptune | P2  | 
| 4/11/2016 | 4/17/2016 | D3 | Netptune | P3  | 
| 4/11/2016 | 4/17/2016 | D4 | Netptune | P4  | 
| 4/11/2016 | 4/17/2016 | E1 | Saturn | P1  | 
| 4/11/2016 | 4/17/2016 | E2 | Saturn | P2  | 
| 4/11/2016 | 4/17/2016 | E3 | Saturn | P3  | 
| 4/11/2016 | 4/17/2016 | E4 | Saturn | P4  | 
| 4/11/2016 | 4/17/2016 | E5 | Saturn | P5  | 
| 4/11/2016 | 4/17/2016 | F1 | Pluto | P1  | 
| 4/11/2016 | 4/17/2016 | F2 | Pluto | P2  | 
| 4/11/2016 | 4/17/2016 | F3 | Pluto | P3  | 
| 4/11/2016 | 4/17/2016 | F4 | Pluto | P4  | 
+-----------+-----------+------+----------+----------+ 

的透視查詢我在尋找將採取星球行值,並將其添加到旋轉列中的值並將其作爲列標題。請看下面的圖片來查看輸出表。從樞軸查詢

結果:

enter image description here

+2

可悲的是,冥王星不再被認爲是行星。 –

+0

謝謝。有用的信息:) – CiberLover007

回答

0

可以使用dynamic crosstab做到這一點:

DECLARE @sql NVARCHAR(MAX) = ''; 

SELECT @sql = 
'SELECT 
     StartDate 
    , EndDate' + CHAR(10) 

SELECT @sql = @sql + 
' , MAX(CASE WHEN Planet = ''' + Planet + ''' AND Rotation = ''' + 
     Rotation + ''' THEN Type END) AS ' + QUOTENAME(Planet + Rotation) + CHAR(10) 
FROM(
    SELECT DISTINCT Planet, Rotation FROM tbl 
) t 
ORDER BY Planet, Rotation 

SELECT @sql = @sql + 
'FROM tbl 
GROUP BY StartDate, EndDate 
ORDER BY StartDate, EndDate;' 
; 

EXEC (@sql); 

ONLINE DEMO

+0

謝謝!其作品!我無法弄清楚!非常感謝!!! – CiberLover007

+0

很高興能有幫助!如果您覺得這對您有用,請隨時接受我的回答。 :-) –

+0

另外,請閱讀答案中引用的文章。它會幫助你理解查詢。 –