我现在有一个表TABLE1数据如下:
设备 车站
设备1 车站1
设备1 车站56
设备1 车站9
设备2 车站1
设备2 车站11
设备2 车站12
设备2 车站13
设备2 车站2
设备2 车站3
设备2 车站33
设备2 车站5
设备2 车站6
设备2 车站7
设备2 车站8欲建立一个视图VIEW1,显示数据如下:
设备 车站1 车站2 车站3 车站4 车站5
设备1 车站1 车站56 车站9
设备2 车站1 车站11 车站12 车站13 车站2
设备3 车站3 车站33 车站5 车站6 车站7
设备4 车站8 如何实现?!
谢谢献策

解决方案 »

  1.   

    楼上 liangCK(小梁 爱 兰儿 ❤)  最近少见啊。 
      

  2.   


    declare @sql varchar(8000)
    set @sql='select 设备'
    select @sql=@sql+',[车站'+ltrim(px)+']=max(case px when '+ltrim(px)+' then 车站 else null end)'
    from (select distinct px=(select count(1) from [TABLE1] where 设备=a.设备 and 车站<=a.车站) from table1 a)a
    set @sql=@sql+' from (select px=(select count(1) from [TABLE1] where 设备=a.设备 and 车站<=a.车站),* from table1 a)a group by 设备'
    exec(@sql)
      

  3.   

    --> 测试数据:[tb]
    if object_id('[tb]') is not null drop table [tb]
    create table [tb]([设备] varchar(5),[车站] varchar(6))
    insert [tb]
    select '设备1','车站1' union all
    select '设备1','车站56' union all
    select '设备1','车站9' union all
    select '设备2','车站1' union all
    select '设备2','车站11' union all
    select '设备2','车站12' union all
    select '设备2','车站13' union all
    select '设备2','车站2' union all
    select '设备3','车站3' union all
    select '设备3','车站33' union all
    select '设备3','车站5' union all
    select '设备3','车站6' union all
    select '设备3','车站7' union all
    select '设备4','车站8'select (select count(1) from [tb] where [设备]=t.[设备] and [车站]<=t.[车站]) as id,
    * into #temp
    from [tb] tdeclare @sql varchar(8000)select @sql = 'select [设备]'select @sql = @sql + ',max(case id when '+ltrim(id)+' then 车站 else '''' end) as [车站'+ltrim(id)+']'
    from (select distinct id from #temp) tselect @sql = @sql + ' from #temp group by [设备]'--print @sql
    exec(@sql)drop table #temp
    ------------------------------
    设备1 车站1 车站56 车站9
    设备2 车站1 车站11 车站12 车站13 车站2
    设备3 车站3 车站33 车站5 车站6 车站7
    设备4 车站8
      

  4.   


    我强烈BS你..来MSSQL SERVER区抢分.
      

  5.   

    -------------------------------------
    --  Author : liangCK 梁爱兰
    --  Comment: 小梁 爱 兰儿
    --  Date   : 2009-12-10 20:54:51
    -------------------------------------
     
    --> 生成测试数据: @tb
    DECLARE @tb TABLE (设备 varchar(5),车站 varchar(6))
    INSERT INTO @tb
    SELECT '设备1','车站1' UNION ALL
    SELECT '设备1','车站56' UNION ALL
    SELECT '设备1','车站9' UNION ALL
    SELECT '设备2','车站1' UNION ALL
    SELECT '设备2','车站11' UNION ALL
    SELECT '设备2','车站12' UNION ALL
    SELECT '设备2','车站13' UNION ALL
    SELECT '设备2','车站2' UNION ALL
    SELECT '设备2','车站3' UNION ALL
    SELECT '设备2','车站33' UNION ALL
    SELECT '设备2','车站5' UNION ALL
    SELECT '设备2','车站6' UNION ALL
    SELECT '设备2','车站7' UNION ALL
    SELECT '设备2','车站8'--SQL查询如下:SELECT
        设备,
        MAX(CASE WHEN rowid%5=0 THEN 车站 END) AS 车站1,
        MAX(CASE WHEN rowid%5=1 THEN 车站 END) AS 车站2,
        MAX(CASE WHEN rowid%5=2 THEN 车站 END) AS 车站3,
        MAX(CASE WHEN rowid%5=3 THEN 车站 END) AS 车站4,
        MAX(CASE WHEN rowid%5=4 THEN 车站 END) AS 车站5
    FROM (SELECT rowid=ROW_NUMBER() OVER(PARTITION BY 设备 ORDER BY 车站)-1,*
          FROM @tb) AS T
    GROUP BY 设备,rowid/5
    ORDER BY 设备/*
    设备    车站1    车站2    车站3    车站4    车站5
    ----- ------ ------ ------ ------ ------
    设备1   车站1    车站56   车站9    NULL   NULL
    设备2   车站1    车站11   车站12   车站13   车站2
    设备2   车站3    车站33   车站5    车站6    车站7
    设备2   车站8    NULL   NULL   NULL   NULL*/
      

  6.   

    SELECT
        设备,
        MAX(CASE WHEN rowid%5=0 THEN 车站 END) AS 车站1,
        MAX(CASE WHEN rowid%5=1 THEN 车站 END) AS 车站2,
        MAX(CASE WHEN rowid%5=2 THEN 车站 END) AS 车站3,
        MAX(CASE WHEN rowid%5=3 THEN 车站 END) AS 车站4,
        MAX(CASE WHEN rowid%5=4 THEN 车站 END) AS 车站5
    FROM (SELECT rowid=ROW_NUMBER() OVER(PARTITION BY 设备 ORDER BY 车站)-1,*
          FROM @tb) AS T
    GROUP BY 设备,rowid/5
    ORDER BY 设备