【问题标题】:How to convert SQL table into a customised gridview如何将 SQL 表转换为自定义的 gridview
【发布时间】:2017-07-08 13:45:15
【问题描述】:

我有一个 c# 网页,我正在为数据库使用 SQL

我需要将表格中的数据显示到网格视图中

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 完成吗?如果是这样,任何人都可以对此提出一些想法吗?

到目前为止,我已经尝试过以下方法,但 @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 @Names=@Names+']'


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

变量@Names 不被视为变量。如果我手动替换变量中的结果值,它会起作用

【问题讨论】:

  • 您能否提供更多关于您在表示层中使用了哪些技术以及您使用什么语言来映射数据库数据以查看的信息。
  • 已更新。请查收

标签: c# sql sql-server gridview pivot-table


【解决方案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

【讨论】:

  • 如何动态获取日期 [18/02],[19/02] 并替换为变量? Select * from #TempTable pivot (SUM(Pass) for Exec_Date IN (@DateRange) ) as PivotTable 假设 @DateRange 由 [2017-02-17]、[2017-02-18]、[2017-02 -19],[2017-02-20]
【解决方案2】:

我找到了解决办法

声明 nvarchar 变量并连接查询和动态列名

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

  EXEC sp_executesql @sqlstring;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    • 2020-01-17
    相关资源
    最近更新 更多