Отображение матрицы из таблицы SQL Server 2008 - PullRequest
1 голос
/ 12 октября 2011

Кто-нибудь знает, как создать матричный дисплей из таблицы базы данных?
Я использую ASP.NET C #, а база данных - SQL Server 2008.

Таблица выглядит так.

enter image description here

Я бы хотел, чтобы матрица выглядела так или примерно так.

enter image description here

Ответы [ 2 ]

1 голос
/ 12 октября 2011

использовать TSQL pivot

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 голосов
/ 12 октября 2011

Мое предложение здесь состоит в том, чтобы вытащить данные в том формате, в котором они у вас есть, в Список объектов (в самом простом виде):

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

И создать себе пользовательский элемент управления, который отображаетHTML-таблицу, использующую List<ServerApplicationRelationship> в качестве источника данных.

Это должно быть довольно легко сделать эту таблицу из предоставленных данных.

Если вы действительно хотите получитьданные в этой форме из 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...