行列转换问题,在线等
关于一个行列转换的问题:
表中有以下数据:
姓名: 语言: 开发时间
张三 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)