日期:2014-05-17  浏览次数:20721 次

SQL2008 行转列 列头数量未知,列头数量查出
表detail:
表头  ID  VAL  NAME
数据  1   56   jack
数据  2   101  mary
数据  3   34   john
数据  4   99   jerry
数据  ... ... ...
——————————————————————————————————

难度一: 需要实现
表头  jack  mary  john  jerry  ...
ID     1     2     3      4    ...
VAL   56   101    34    99    ...

表头的jack、mary、john、jerry不止4个哦,是查出来的

——————————————————————————————————

难度二:如果detail中有两条或者更多ID=1,NAME=jack的数据
表头  ID  VAL  NAME
数据  1   56   jack
数据  1   10   jack
数据  1   10    jack

需要实现
表头  jack  mary  john  jerry  ...
ID     1     2     3      4    ...
VAL   76   101    34    99    ...

------解决方案--------------------
--仅供参考
if OBJECT_ID('tempdb..#temp', 'u') is not null   drop table #temp;
go
create table #temp( [表头] varchar(100), [ID] int, [VAL] int, [NAME] varchar(100));
insert #temp
select '数据','1','56','jack' union ALL
SELECT '数据','1','10','jack' UNION ALL
SELECT '数据','1','10','jack'  UNION ALL
select '数据','2','101','mary' union all
select '数据','3','34','john' union all
select '数据','4','99','jerry'


--SQL:
;WITH cte AS
(
select id, name, val=SUM(val) from #temp GROUP BY id, name