日期:2014-05-16  浏览次数:20466 次

行列转换统计
之前是这样:

行列转换后这样:

但是如何把查询结果显示为:



------解决方案--------------------
----------------------------------------------------------------
-- Author  :DBA_HuangZJ(发粪涂墙)
-- Date    :2014-03-04 13:28:17
-- Version:
--      Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) 
-- Apr  2 2010 15:48:46 
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据[ym]
if object_id('[ym]') is not null drop table [ym]
go 
create table [ym]([AID] int,[PID] int,[AppraisqlStandard] nvarchar(4),[德] int,[绩] int,[廉] int,[能] int,[勤] int)
insert [ym]
select 1,1,N'差',null,null,2,null,null union all
select 1,1,N'良好',null,1,null,1,1 union all
select 1,1,N'一般',null,null,null,null,1 union all
select 1,1,N'优秀',2,1,null,1,null
--------------生成数据--------------------------
;WITH cte AS (
select AID,PID, AppraisqlStandard+CAST(ISNULL(德 ,0) AS VARCHAR) [德],AppraisqlStandard+CAST(ISNULL([绩] ,0) AS VARCHAR) [绩],
AppraisqlStandard+CAST(ISNULL([廉] ,0) AS VARCHAR)[廉],AppraisqlStandard+CAST(ISNULL([能] ,0) AS VARCHAR) [能],AppraisqlStandard+CAST(ISNULL([勤] ,0) AS VARCHAR)[勤]
from [ym])
select a.AID,a.PID,
stuff((select ','+德
 from cte b 
       where b.AID=a.AID and b.PID=a.PID 
       for xml path('')),1,1,'') N'德'       ,
       stuff((select ','+绩 from cte b 
       where b.AID=a.AID and b.PID=a.PID 
       for xml path('')),1,1,'') N'绩',
       stuff((select ','+廉
 from cte b 
       where b.AID=a.AID and b.PID=a.PID 
       for xml path('')),1,1,'') N'廉',
       stuff((select ','+能
 from cte b 
       where b.AID=a.AID and b.PID=a.PID 
       for xml path('')),1,1,'') N'能',
       stuff((select ','+勤
 from cte b 
       where b.AID=a.AID and b.PID=a.PID 
       for xml path('')),1,1,'') N'勤'
from cte a
group by  a.AID,a.PID