日期:2014-05-19  浏览次数:20455 次

行列转换问题,在线等
关于一个行列转换的问题:
表中有以下数据:

姓名:         语言:     开发时间
张三             VB             3个月
张三             VC             4个月
张三             PB             1个月
行数要在三行以上,现在想要一个以下的结果:

张三     VB     3个月     VC     4个月     PB   1个月
谢谢大家

------解决方案--------------------
select 姓名, 'VB ',max(case 语言= 'vb ' then 开发时间 else 0 end) as 开发时间vb,
'vc ',max(case 语言= 'vc ' then 开发时间 else 0 end) as 开发时间vb,
'pb ',max(case 语言= 'pb ' then 开发时间 else 0 end) as 开发时间vb from test
group by 姓名


典型的问题!
------解决方案--------------------
declare @sql varchar(8000)
set @sql = 'select 语言 '
select @sql = @sql + ',max(case km when ' ' '+km+ ' ' ' then cj end) [ '+km+ '] '
from (select distinct km from test) as a
select @sql = @sql+ ' from test group by 语言 '
exec(@sql)

你可以试下
------解决方案--------------------
CREATE TABLE #TEMP(语言 NVARCHAR(20))
INSERT INTO #TEMP(语言)
(SELECT 语言 FROM a)
DECLARE @SQL NVARCHAR(4000)
SET @SQL = 'SELECT 姓名 '
SELECT @SQL = @SQL + ', ' + 语言 + '=convert(nvarchar,ISNULL(sum(CASE a.语言 WHEN ' ' '+语言+ ' ' ' THEN a.开发时间 END),0))+ ' '个月 ' ' '
FROM #TEMP
SET @SQL = @SQL + 'FROM a GROUP BY 姓名 '
PRINT @SQL
EXECUTE(@SQL)