【问题标题】:Retrieve data dynamically from pivot SQL Server从数据透视 SQL Server 动态检索数据
【发布时间】:2019-02-21 00:27:13
【问题描述】:

Asmx 代码:

            SqlDataReader rdr = cmd.ExecuteReader();
            while (rdr.Read())
            {
                HBPivot_cs thpivot = new HBPivot_cs();
                thpivot.EMPLOYEEID = rdr["EMPLOYEEID"].ToString();
                thpivot.FIRSTDATE = rdr["06/26/2018"].ToString();
                thpivot.SECONDDATE = rdr["06/27/2018"].ToString();
                listhbpivot.Add(thpivot);
            }
            con.Close();

我的数据: 此数据来自 Pivot

EMPLOYEEID     06/26/2018     06/27/2018     06/28/2018     06/29/2018
1              07:00 AM       08:00 AM       07:30 AM       10:00 AM
2              07:01 AM       08:20 AM       07:10 AM       06:00 AM

字段名是动态的...如何使用 rdr.read 检索它 谢谢

【问题讨论】:

  • 可以使用索引rdr[1].ToString();,rdr[2].ToString();
  • 将它传递给列表怎么样?

标签: asp.net sql-server web-services pivot


【解决方案1】:
  1. 在您的 sql server 数据库中创建以下存储过程。

    create procedure dbo.EmploeeDynamicPivot
    as
    begin
    
        set nocount on;
    
        declare
            @columns    as nvarchar(max),
            @query      as nvarchar(max)
    
        select
            @columns    =
            stuff
            ((
                    select
                    distinct
                        ',' + quotename([your_date_column]) 
                    from
                        [your_table]
                    for xml path(''), type
            ).value('.', 'nvarchar(max)'), 1, 1, '')
    
    
        set @query =
        'select
            EMPLOYEEID, ' + @columns + '
        from 
        (
            select
                EMPLOYEEID   ,
                [your_date_column]   ,
                [your_value_column]
            from
                [your_table]
        )
            sourceTable
        pivot 
        (
            sum([your_value_column])
            for [your_date_column] in (' + @columns + ')
        )
            pivotTable'
    
    
        execute(@query);
    
        set nocount off;
    
    end
    
  2. 通过以下代码编辑您的 c# 代码。

    var sqlConnection = new SqlConnection([your_connection_string]);
    
    sqlConnection.Open();
    
    var sqlCommand = sqlConnection.CreateCommand();
    
    sqlCommand.CommandType = CommandType.StoredProcedure;
    sqlCommand.CommandText = "EmploeeDynamicPivot";
    
    var rdr = sqlCommand.ExecuteReader();
    
    while (rdr.Read())
    {
        for (int i = 0; i < rdr.FieldCount; i++)
        {
            var value = rdr.GetString(i);
            or
            var value = rdr.GetValue(i);
    
            //do something... 
        }
    }
    ...
    

【讨论】:

  • 如何使用rdr
  • 使用索引代替列名。例如 rdr.GetString(0) 0 代表第一列。
  • while (rdr.Read()) { for (int i = 0; i
  • 请详细说明您的问题。查询是动态的并返回字段名。
  • 请查看我想显示的“我的数据”...如果有人添加了新日期,它也会动态添加新日期
猜你喜欢
  • 2014-10-16
  • 2014-07-26
  • 1970-01-01
  • 2013-02-09
  • 2018-11-22
  • 1970-01-01
  • 2015-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多