我的输出看起来像这样:
colA | colB | Value
A | a | 46
A | b | 8979
A | C | 684168468
B | a | 68546841
B | b | 456846
B | c | 468468
C | a | 684684
. | . | .
. | . | .
列表一直在继续。 Colb重复a,b,c的序列,并且可能存在重复值,但我想它并不重要,因为它将具有不同的colB值。
我想让它看起来像这样
col A | a | b | c
A | 46 | 8979 | 684168468
B | 68546841 | 456846 | 468468
C | 684684
我知道我可以使用数据透视表,但我想在sql server中执行它,因为我有很多行。 谁能告诉我如何实现这一目标?
答案 0 :(得分:3)
简单的PIVOT:
WITH Src AS
(
SELECT * FROM (VALUES
('A', 'a', 46 ),
('A', 'b', 8979 ),
('A', 'C', 684168468),
('B', 'a', 68546841 ),
('B', 'b', 456846 ),
('B', 'c', 468468 ),
('C', 'a', 684684 )) T(colA, colB, Value)
)
SELECT *
FROM Src
PIVOT
(SUM(Value) FOR colB IN (a,b,c)) P
示例强>
colA a b c
---- ----------- ----------- -----------
A 46 8979 684168468
B 68546841 456846 468468
C 684684 NULL NULL
<强>结果:强>
{{1}}
答案 1 :(得分:0)
这将使您从第二列
中的可能数据值创建列列表DECLARE @values varchar(max)
SELECT @values =
STUFF(
(
select distinct ',[' + col2 + ']'
from tblData
for xml path('')
),
1,1,'')
DECLARE @SQL nvarchar(max)
SELECT @SQL = N'
select
*
from tblData
PIVOT (
sum(val)
FOR col2
IN (
' + @values + '
)
) PivotTable
'
--print @SQL
exec sp_executesql @SQL
样本数据:
create table tblData (col1 varchar(5),col2 varchar(5),val bigint)
insert into tblData values
('A', 'a', 46 ),
('A', 'b', 8979 ),
('A', 'C', 684168468),
('B', 'a', 68546841 ),
('B', 'b', 456846 ),
('B', 'c', 468468 ),
('C', 'a', 684684 )