解决方案 »

  1.   

    求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排列在前面。 
      

  2.   

    行转列问题。格式稍稍变了。另外你的建表语句不大规范。
    1 建表语句:create table sbjc
    (
    area varchar(20),
    status varchar(20),
    ip varchar(50)
    )insert into sbjc values('外科','良好','192.168.1.1');
    insert into sbjc values('皮肤科','error','192.168.1.2');
    insert into sbjc values('五官科','良好','192.168.1.3');
    insert into sbjc values('外科','良好','192.168.1.4');
    insert into sbjc values('外科','error','192.168.1.5');
    insert into sbjc values('皮肤科','error','192.168.1.6');
    insert into sbjc values('五官科','error','192.168.1.7');
    insert into sbjc values('外科','良好','192.168.1.8');
    insert into sbjc values('内科','error','192.168.1.9');
    insert into sbjc values('内科','良好','192.168.1.10');
    insert into sbjc values('口腔科','error','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');
    2 取数据SQLselect * 
    from (select * from sbjc) a 
    pivot(max(ip) for area in(外科,内科,五官科,口腔科)) b
      

  3.   

    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 
    )a
    PIVOT (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.71
    NULL 异常192.168.1.9 NULL 良好192.168.1.4 异常192.168.1.7
    NULL NULL NULL 异常192.168.1.5 NULL
    */
      

  4.   

    参考这个!!
    http://www.itpub.net/thread-1719166-1-2.html
      

  5.   


    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 (select 区域,设备状况+设备ip '设备',
          row_number() over(partition by 区域 order by case 设备状况 when '异常' then 0 when '良好' then 1 end) 'rn' 
          from sbjc) a
    pivot(max(设备) for 区域 in([外科],[皮肤科],[五官科],[内科],[口腔科])) p/*
    外科                             皮肤科                            五官科                            内科                             口腔科
    ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------
    异常192.168.1.5                  异常192.168.1.2                 异常192.168.1.7                异常192.168.1.9                 异常192.168.1.13
    良好192.168.1.8                  异常192.168.1.6                 良好192.168.1.3                良好192.168.1.10                良好192.168.1.14
    良好192.168.1.1                  NULL                           良好192.168.1.71               良好192.168.1.70                 NULL
    良好192.168.1.4                  NULL                           NULL                           NULL                            NULL(4 row(s) affected)
    */