我有這樣的表作爲輸入透視表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
我有這樣的表作爲輸入透視表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
請嘗試以下查詢
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
我有動態數據B列 –
@ J.Khan更新我的答案!請檢查。 – DhruvJoshi
可以使用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 |
+=======+========+========+======+
列數據類型是字符串 –
歡迎堆棧溢出!請[參觀](http://stackoverflow.com/tour),看看幫助中心,特別是[如何提出一個好問題?](http://stackoverflow.com/help/how-到問)。你堅持什麼部分?你有什麼嘗試? –
此外,請提供以下形式的示例數據:'declare @t table(A int,B int,C int); (A,B,C) 值(11001,1011,873824),11001,1012,2240)等等...' – Ralph