C# 中的 UDF 更新表(将所有数据与查询结果相除)

Posted

技术标签:

【中文标题】C# 中的 UDF 更新表(将所有数据与查询结果相除)【英文标题】:UDF in C# that updates a table (dividing all data with result of query) 【发布时间】:2011-10-23 23:08:17 【问题描述】:

有没有办法将表的每个数据(所有列和行)除以

select count(*) from table;

例如

表格

     a1  a2  a3   a4
   -------------------
    438 498 3625 3645
    500 291 5000 2351
    233 263 1298 1687
    198 117 1744 5932
    438 498 3625 3648
    500 291 5000 2637

然后将它们中的每一个除以6,即行数

     a1    a2   a3      a4
   ------------------------
   73.0  83.0 604.16  607.5
   83.33 48.5 833.33  391.83
   ...
   ...
   ...
   ...

一个问题是我的数据是 INT,但转换后它们会是两倍...

在 c# 中我是这样做的:

int N = 0;
string sql = @"select count(*) from 'ExampleTable'";
N  = (int)cmd.ExecuteScalar();

int Columns = 0;
sql = @"select count(*) from information_schema.COLUMNS WHERE TABLE_NAME = 'ExampleTable'";

Columns  = (int)cmd.ExecuteScalar();


cmdLoad.CommandText = "SELECT * FROM [ExampleTable]";
int i,j;
double[,] newTable  = new double[N, Columns];
using (SqlDataReader reader = cmdLoad.ExecuteReader())

   while (reader.Read())
    
        for ( i = 1; i <= N; j++)
        
           for ( j = 1; j <= Columns; j++)
          
              newTable[i,j] = reader.GetDouble((i*j) - 1) / N ;
           //j  
         //i
     //reader

但我不确定...

【问题讨论】:

【参考方案1】:

如果你事先知道这些列,那很容易:

SELECT 
    a1 / Rows As a1, 
    a2 / Rows As a2, 
    a3 / Rows As a3, 
    a4 / Rows As a4
FROM 
(
    SELECT *, CAST(COUNT(*) OVER (PARTITION BY NULL) as float) As Rows
    FROM ExampleTable
) Data

如果没有,您将需要有效地执行您在 C# 中所做的事情 - 遍历列并构建动态查询

DECLARE @TableName varchar(100)
DECLARE @Query varchar(max)
SELECT @TableName = 'ExampleTable'
SELECT @Query = 'SELECT '
SELECT @Query = @Query + '[' + COLUMN_NAME + '] / Rows as [' + COLUMN_NAME + '], '
FROM information_schema.COLUMNS col WHERE TABLE_NAME = @TableName

SELECT @Query = @Query + 'Rows FROM ( SELECT *, CAST(COUNT(*) OVER (PARTITION BY NULL) as float) As Rows FROM [' + @TableName + ']) Data'
EXECUTE(@Query)

【讨论】:

以上是关于C# 中的 UDF 更新表(将所有数据与查询结果相除)的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server StoredProc 与 UDF 内联表

将查询部分与 Lucene 和数据库中的部分(MySQL)相结合

外连接查询

pandas_udf结果无法写入表

C#编程代码如何从数据库中查询并把查询结果显示在dataGridView?

访问:使用子查询中的计数更新查询 - 错误或所有结果