sample datas
date | num | name | value
01012012 | 1 | A | 20
01012012 | 1 | B | 30
01012012 | 2 | C | 40
wish to like this
date | num | A | B | C
01012012 | 1 | 20 | 30 | --
01012012 | 2 | -- | -- | 40
How about something like
DECLARE @Table TABLE(
date DATETIME,
num INT,
name VARCHAR(20),
value FLOAT
)
INSERT INTO @Table SELECT '20121201',1,'A',20
INSERT INTO @Table SELECT '20121201',1,'B',30
INSERT INTO @Table SELECT '20121201',2,'C',40
SELECT *
FROM (
SELECT date,
num,
name,
value
FROM @Table
) t
PIVOT (
SUM(Value) FOR name IN ([A],[B],[C])
) p
For dynamic columns you need to use dynamic SQL
declare
@cols nvarchar(max),
@stmt nvarchar(max)
select @cols = isnull(@cols + ', ', '') + '[' + Name + ']' from table1
select @stmt = '
select *
from table1 as T
pivot
(
max(T.value)
for name in (' + @cols + ')
) as P'
exec sp_executesql @stmt = @stmt
If you don't need a dynamic number of columns, you can use plain SQL like
select *
from table1 as T
pivot
(
max(T.value)
for name in ([A],[B],[C])
) as P
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.