求sql语句(很多人都无法解决呀)
求sql语句:
以下在sql server2005上运行:
create table sbjc
(
区域 varchar(20),
设备状况 varchar(20),
设备ip varchar(50)
)
insert into sbjc values('外科','良好','192.168.1.1');
insert into sbjc values('皮肤科','异常','192.168.1.2');
insert into sbjc values('五官科','良好','192.168.1.3');
insert into sbjc values('外科','良好','192.168.1.4');
insert into sbjc values('外科','异常','192.168.1.5');
insert into sbjc values('皮肤科','异常','192.168.1.6');
insert into sbjc values('五官科','异常','192.168.1.7');
insert into sbjc values('外科','良好','192.168.1.8');
insert into sbjc values('内科','异常','192.168.1.9');
insert into sbjc values('内科','良好','192.168.1.10');
insert into sbjc values('口腔科','异常','192.168.1.13');
insert into sbjc values('口腔科','良好','192.168.1.14');
insert into sbjc values('内科','良好','192.168.1.70');
insert into sbjc values('五官科','良好','192.168.1.71');
select * from sbjc
区域 设备状况 设备ip
--------------------------------
外科良好192.168.1.1
皮肤科异常192.168.1.2
五官科良好192.168.1.3
外科良好192.168.1.4
外科异常192.168.1.5
皮肤科异常192.168.1.6
五官科异常192.168.1.7
外科良好192.168.1.8
内科异常192.168.1.9
内科良好192.168.1.10
口腔科异常192.168.1.13
口腔科良好192.168.1.14
内科良好192.168.1.70
五官科良好192.168.1.71
问题:用SQL语或程序,按如下格式显示:
外科 皮肤科 五官科 内科 口腔科
-----------------------------------------------------
异常192.168.1.5 异常192.168.1.2异常192.168.1.7 异常192.168.1.9 异常192.168.1.13
良好192.168.1.1 异常192.168.1.6良好192.168.1.3 良好192.168.1.10良好192.168.1.14
良好192.168.1.4 良好192.168.1.71 良好192.168.1.70
良好192.168.1.8
补充一下,在显示结果的时候,需要将异常的设备IP排列在前面。
[解决办法]
DECLARE @sql VARCHAR(max)SELECT @sql=ISNULL(@sql+',','')+QUOTENAME([区域]) FROM sbjc GROUP BY [区域]EXEC('SELECT '+@sql+' FROM ( SELECT 区域,设备状况+设备ip as 设备,rn=row_number() over(partition by 区域 order by charindex(设备状况,''良好异常'')) FROM sbjc )aPIVOT (max(设备) FOR [区域] IN('+@sql+')) b')/*口腔科 内科 皮肤科 外科 五官科良好192.168.1.14 良好192.168.1.70 异常192.168.1.2 良好192.168.1.1 良好192.168.1.3异常192.168.1.13 良好192.168.1.10 异常192.168.1.6 良好192.168.1.8 良好192.168.1.71NULL 异常192.168.1.9 NULL 良好192.168.1.4 异常192.168.1.7NULL NULL NULL 异常192.168.1.5 NULL*/