2011-10-12 59 views
1

有谁知道如何从数据库表创建矩阵显示?
我使用ASP.NET C#和数据库是SQL Server 2008.来自SQL Server 2008表的矩阵显示

表看起来像这样。

enter image description here

我想矩阵看起来像这样或类似的。

enter image description here

+1

类似问题透视表: http://stackoverflow.com/questions/1069677/pivot-table-in-c –

回答

0

这里我的建议是拉出来的数据恰好你有它的格式,为实体的名单(在其最简单的):

public class ServerApplicationRelationship 
{ 
    public string Server{get;set;} 
    public string Application{get;set;} 
} 

而自己创建一个自定义该控件使用List<ServerApplicationRelationship>作为其数据源呈现HTML表格。

从提供的数据中呈现该表格应该非常容易。

如果你真的想拉出来的数据从SQL那个形状,你可以使用查询,如

select application, 
      case when exists(select 1 from example where application=ex.application and server='server 1') THEN 1 ELSE 0 end as [server 1], 
      case when exists(select 1 from example where application=ex.application and server='server 2') THEN 1 ELSE 0 end as [server 2], 
      case when exists(select 1 from example where application=ex.application and server='server 3') THEN 1 ELSE 0 end as [server 3] 
    from yourTable ex 
    group by application 
1

使用TSQL枢

create table table1 
(
    serverName varchar(30), 
    app varchar(50) 
); 
go 

insert table1 (serverName , app) values ('server1' , 'app A'); 
insert table1 (serverName , app) values ('server2' , 'app A'); 
insert table1 (serverName , app) values ('server2' , 'app B'); 
insert table1 (serverName , app) values ('server3' , 'app B'); 
insert table1 (serverName , app) values ('server1' , 'app C'); 
insert table1 (serverName , app) values ('server3' , 'app C'); 
go 

create procedure GetPivotTable 
as begin 
DECLARE @PivotColumnHeaders VARCHAR(MAX) 
SELECT @PivotColumnHeaders = 
    COALESCE(@PivotColumnHeaders + ',[' + cast(t.serverName as varchar) + ']' , 
    '[' + cast(t.serverName as varchar)+ ']') 
FROM (select distinct serverName from table1) t 


DECLARE @PivotTableSQL NVARCHAR(MAX) 
SET @PivotTableSQL = N' 
select * from 
(select app, serverName from table1) sourceTable 
pivot 
(
    count(serverName) for serverName in (' + @PivotColumnHeaders + ') 
) pivottable 
' 
EXECUTE(@PivotTableSQL) 
end 

go 

exec GetPivotTable 
+0

编辑处理任何数量的服务器和应用程序。您可以将它放入存储过程,以便于在asp.net代码中与您的asp.net代码 –

+0

进行整合,您可以使用ado.net调用存储过程GetPivotTable来获取数据透视表。 –

+0

感谢您的回复。两者看起来很有趣因为我之前没有使用它们,所以我必须稍微查看数据透视表。 – RickBowden