2016-03-16 67 views
0

我有這樣的表作爲輸入透視表2008 R2

A  B  C 
11001 1011 873824 
11001 1012 2240 
11002 1011 36792 
11002 1012 557172 
11003 1061 2970 

我需要這個輸出使用旋轉

A   1011 1012 1061 
11001  873824 2240 
11002  36792 557172 
11003      2970 
+2

歡迎堆棧溢出!請[參觀](http://stackoverflow.com/tour),看看幫助中心,特別是[如何提出一個好問題?](http://stackoverflow.com/help/how-到問)。你堅持什麼部分?你有什麼嘗試? –

+0

此外,請提供以下形式的示例數據:'declare @t table(A int,B int,C int); (A,B,C) 值(11001,1011,873824),11001,1012,2240)等等...' – Ralph

回答

0

請嘗試以下查詢

select A,[1011],[1012],[1061] from 
(select * from t)s 
pivot 
(max(C) for B in ([1011],[1012],[1061]))p 

這裏有一個link to demo fiddle:http://sqlfiddle.com/#!6/93e1e/1

說明:

上述查詢使用簡單的PIVOT語法。這裏從列的所有數據A,B,和C在源集合中選擇(別名爲多個),然後在B列樞列的值C.

有用的鏈接:閱讀來自PIVOT https://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx

更MSDN上

動態SQL:

--create table t (A int, B int, C int); 
--insert into t values (11001,1011,873824) 
--,(11001,1012,2240) 
--,(11002,1011,36792) 
--,(11002,1012,557172) 
--,(11003,1061,2970); 

DECLARE @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX); 

SET @cols = STUFF((SELECT distinct ',[' + CAST(B AS NVARCHAR) +']' FROM t FOR XML PATH('')) ,1,1,'') 

SET @query='select A,' + @cols + ' from '+ 
'(select * from t)s '+ 
'pivot '+ 
'(max(C) for B in ('[email protected] +'))p ' 

EXEC(@query) 

--drop table t 
+0

我有動態數據B列 –

+0

@ J.Khan更新我的答案!請檢查。 – DhruvJoshi

1

可以使用Case表達。

查詢

select A, 
max(case B when 1011 then C end) as [1011], 
max(case B when 1012 then C end) as [1012], 
max(case B when 1061 then C end) as [1061] 
from your_table_name 
group by A; 

,或者您也可以使用動態SQL查詢。

查詢

declare @sql as varchar(max); 

select @sql = 'select A, ' + stuff(
    (
     select distinct ',max(case B when ' + cast(B as varchar(50)) + ' 
       then C end) as [' + cast(B as varchar(50)) + ']' 
     from your_table_name 
     for xml path, type).value('.[1]', 'nvarchar(max)'), 
    1, 1, '' 
); 

select @sql += ' from your_table_name group by A;' 
execute (@sql); 

注意:假設您的列數據類型爲INT

結果

+=======+========+========+======+ 
| A  | 1011 | 1012 | 1061 | 
+=======+========+========+=======+ 
| 11001 | 873824 | 2240 |  | 
+-------+--------+--------+------+ 
| 11002 | 36792 | 557172 |  | 
+-------+--------+--------+------+ 
| 11003 |  |  | 2970 | 
+=======+========+========+======+ 
+0

列數據類型是字符串 –