我现在有一个表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 车站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 如何实现?!
谢谢献策
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)
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
我强烈BS你..来MSSQL SERVER区抢分.
-- 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*/
设备,
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 设备