根据条件计算两个细胞

时间:2013-02-23 16:17:56

标签: asp.net sql-server tsql

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

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

我有这样的问题;我需要计算这两个细胞的加法并将其除以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

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

非常感谢。

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分:0)

以下是使用sum() over函数的select的sql-fiddle-demo。我认为它支持sql-server 2005及以上版本。

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

UPDATE sql-fiddle-demo

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 |