2017-02-19 8 views
1

У меня есть C# веб-страница и я с помощью SQL для базы данныхКак конвертировать SQL таблицы в настраиваемую GridView

мне нужно, чтобы отобразить данные из таблицы в GridView

SQL: У меня есть таблица ниже

Exec_Date      Plat  Pass  Fail 
---------------------------------------------------------------- 
2017-02-19 12:32:43.570  MSSQL  10  12 
2017-02-19 12:32:43.570  MSSQL  10  12 
2017-02-18 12:32:43.570  Sybase  10  12 
2017-02-18 12:32:43.570  Oracle  10  12 

я хотел бы преобразовать таблицу в требуемом формате для презентации

Status  18/02 19/02 
------------------------- 
Pass  20  20 
Fail  24  24 

Выше возможно сделать Pivot? если да, то кто-нибудь может дать какое-то представление об этом PLS?

Я попытался ниже до сих пор и @names не решает значение этой переменной в запросе

create table #TempTable 
(Exec_Date varchar(max), 
Pass int, 
Ref_Status varchar(max) 
) 


Insert into #TempTable 
select cast(Exec_Date as DATE) as Date,SUM(Pass) as Pass,'PASS' from F_Exec where cast(Exec_Date as DATE) >= '2017-02-17' and cast(Exec_Date as DATE) <= '2017-02-20' group by Exec_Date,Pass 


DECLARE @Names varchar(max) 
SELECT @Names = COALESCE(@Names + '],[', '[') + Exec_Date FROM #TempTable 

select @[email protected]+']' 


Select * from #TempTable pivot 
(SUM(Pass) for Exec_Date IN (@Names))as PivotTable 

Переменная @names не рассматривается в качестве переменной. Если я вручную заменить, что результирующее значение из переменной работает

+0

Вы можете получить дополнительную информацию о том, какую технологию вы используете на уровне презентации, и о том, какой язык вы используете для сопоставления данных базы данных для просмотра , –

+0

обновлено now.Pls chk – sriram

ответ

1

Попробуйте этот код:

declare @tbl table (Exec_Date datetime, Plat varchar(max), Pass int, Fail int) 

insert into @tbl(Exec_Date , Plat , Pass , Fail) values 
('2017-02-19 12:32:43.570', 'MSSQL',10,12), 
('2017-02-19 12:32:43.570', 'MSSQL',10,12), 
('2017-02-18 12:32:43.570', 'Sybase',10,12), 
('2017-02-18 12:32:43.570', 'Oracle',10,12) 

select * from 
    (
     select Date,Status,sum(Success) success from 
     (

      select left(convert(varchar(20),Exec_Date,103),5) as [Date],Pass,Fail from @tbl 
     ) as baseData 

     unpivot 
     (
      Success for Status in (Pass,Fail) 

     ) as tblUnPivot 

     group by date ,status 
    ) as baseData 

pivot 
(
    sum(success) 
    for Date in ([18/02],[19/02]) 
) as tblPivot 

order by Status 
+0

как получить даты [18/02], [19/02] динамически и заменить как переменную? Выберите * от #TempTable поворота (СУММА (Pass) для Exec_Date IN (@DateRange)) в качестве сводной таблицы предполагает @DateRange это состоит из значений, как [2017-02-17], [2017-02-18] , [2017-02-19], [2017-02-20] – sriram

1

Я получил решение

объявил NVARCHAR переменная и сцепляются в запросе & динамические имена столбцов

DECLARE @sqlstring nvarchar(MAX) 
SET @sqlstring =N' 
Select * from #TempTable pivot (SUM(Pass) for Exec_Date IN (' [email protected]+'))as PivotTable;'; 

    EXEC sp_executesql @sqlstring; 
Смежные вопросы