搜档网
当前位置:搜档网 › SQL行列转换

SQL行列转换

SELECT 姓名,病历号,
STUFF((SELECT '+'+ 费用明细 FROM 原始数据 WHERE 病历号=A.病历号 FOR XML PATH('')),1,1,'') AS [Value],
SUM(总金额)
FROM 原始数据 AS A
GROUP BY 姓名,病历号
--> 测试数据: #T
if object_id('tempdb.dbo.#T') is not null drop table #T
create table #T (项目 nvarchar(5),值 int,位置 int)
insert into #T
select '项目',15,1 union all
select '项目',34,2 union all
select '项目',56,3 union all
select '项目',42,4 union all
select '项目',56,1 union all
select '项目',67,2 union all
select '项目',31,3 union all
select '项目',89,4 union all
select '项目',45,1 union all
select '项目',22,2 union all
select '项目',8,3 union all
select '项目',23,4
declare @sql varchar(8000)
set @sql=''
select @sql=@sql+',max(case when 项目='''+项目+''' then 值end) ['+项目+']'
from #T group by 项目
set @sql=stuff(@sql,1,1,'')
exec ('select '+@sql+',位置from #T group by 位置')

DECLARE @sql VARCHAR(8000)
SET @SQL=''
SELECT @sql=@sql+',MAX(CASE WHEN 费用明细=ISNULL('''+费用明细+''',0) THEN ISNULL(总金额, 0) END) ['+费用明细+']'
FROM 原始数据 GROUP BY 费用明细
SET @SQL=stuff(@SQL,1,1,'')
PRINT @SQL
EXEC ('SELECT 病历号,姓名,' + @SQL + ' FROM 原始数据GROUP BY 病历号,姓名')

相关主题