2

我有一个带有 C# 编码的 asp.net 项目。我有一张这样的桌子;

NAME       WORK_TYPE        FM            FM_HOUR
-------------------------------------------------
Mike         IN            -2800                
Mike         OUT            3400             ??
Jane         IN              400
Jane         OUT            -100             ??

在这里我有这样的问题;我需要计算这 2 个单元格的加法并将其除以 60 并将其写入右侧单元格。

例如; 我需要计算 Mike FM IN 和 Mike FM OUT 的加法,我需要将其写入 Mike FM_HOUR 单元格。

我怎样才能做到这一点 ?

我写了这段代码,但它当然不起作用,只是为了帮助你;

SqlConnection conn;
    SqlCommand cmd = new SqlCommand();
    string strSQL = "UPDATE bilgiler3 SET FM_HOUR= SELECT SUM((FM WHERE WORK_TYPE='OUT') + (FM WHERE WORK_TYPE='IN')) / 60 "
    string bag_str = WebConfigurationManager.ConnectionStrings["asgdb01ConnectionString"].ConnectionString;
    conn = new SqlConnection(bag_str);
    conn.Open();...... and goes like this

请等待您的帮助。我真的需要这样做。

非常感谢你。

4

2 回答 2

1

这应该产生所需的输出:

UPDATE bilgiler3 SET FM_HOUR= T.Result
FROM (
  SELECT Name , SUM(FM) / 60 AS Result
  FROM bilgiler3
  GROUP BY Name
) T
INNER JOIN bilgiler3 ON T.Name = bilgiler3.Name
WHERE bilgiler3.Work_Type = 'OUT'
于 2013-02-23T16:42:28.653 回答
0

这是一个用于选择使用函数的sql-fiddle-demo 。sum() over认为它支持 sql-server 2005 及更高版本。

我认为您最好在存储过程中执行此操作,而不是内联 sql。

对于sql-fiddle-demoUPDATE

update T1 set T1.fm_hour = T2.fm_hour
from T T1 join (Select distinct name,sum(fm) over (partition by name)/60 fm_hour
                from T) T2 on T1.name = T2.name
where T1.work_type = 'out'

为一个SELECT

Select name,work_type,fm, 
       case work_type 
           when 'out' then sum(fm) over (partition by name)/60
           else null end fm_hour
from yourTable

| NAME | WORK_TYPE |    FM | FM_HOUR |
--------------------------------------
| Jane |        IN |   400 |  (null) |
| Jane |       OUT |  -100 |       5 |
| Mike |        IN | -2800 |  (null) |
| Mike |       OUT |  3400 |      10 |
于 2013-02-23T17:02:08.830 回答